文史赏析古今中外

种子点的提取

2024-01-29  本文已影响0人  大龙10

书名:数字图像处理实战
作者:杨坦 张良均
出版社:人民邮电出版社有限公司
出版时间:2023-11-01
ISBN:9787115623850


第9章 钢轨表面缺陷检测

9.4 基于区域生长算法的钢轨表面缺陷检测

9.4.1 种子点的提取

1、灰度直方图
import matplotlib.pyplot as plt
mask = cv2.imread(mask_path)
img = cv2.imread(Rail_surface_image_path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #转灰度图
mask_gray = cv2.cvtColor(mask, cV2.COLOR BGR2GRAY)
img_gray = img_gray.T
mask_gray = mask_gray.T
def plt hist(img):
  fig = plt.figure()
  ax = fig.add_subplot(1,1,1)
  ax.hist(img.ravel(), 256,[0,80])
  ax.set title('rail_' + str(picture label) + ' gray plot')
  fig.savefig('../tmp/' + str(picture_label) + 'gray.png',dpi=400)
plt.show()
mask_bool = np.where(mask_gray > 20, True, False)
plt_hist(img_gray[mask_bool])
img_gray2 = np.where(mask_bool, img_gray, 255)
cv2.imshow('rail ' + str(picture label), img_gray2)
cv2.waitKey(0)
cv2.destroyAllwindows()

2、不同图像缺陷处的灰度值直方图
3、统计归纳出表面缺陷的灰度值
4、寻找种子点
# 寻我初始种于点集合
# 先找到所有灰度值在25 以下的像素点,然后将在同一个连通区域的点去除
# 每一个连通区域只保留一个种子
zhongzi_dict = []
zhongz_yuzhi = 25
for i in range(len(img_gray)):
  for j in range(len(img_gray[0])):
    if img_gray4[i][j]< zhongzi_yuzhi:
    # 找到一个符合条件的点后,将该点添加至字典内,键值为所在连通区域的编号
      if str(img_flag[i][j]) not in zhongzi dict:
      # 判断该连通区域在字典内是否存在符合条件的点
        zhongzi_dict[str(img_flag[i][j])]= []
      zhongz_dict[str(img_flag[il[jl)].append([i, j])
    # 得到了连通区域与内部可用种子点的对应关系后,每个连通区域只保留1个种子点
print('连通区域数量为: [0]'.format(len(zhongzi_dict.keys())))
# 每个连通区域选择的种子点最好在连通区域中心
zhongzi =[]
# for i in range(Len(zhongzi dict.keys())):
for i in zhongzi dict.keys():
  k = len(zhongzi dict[i]) // 2
  zhongzi.append(zhongzi_dict[il[k])
print('选取的种子点为:',zhongzi)

5、代码说明

选取样本图像rail_2,如图9-11所示。经过代码9-5所示代码处理后保留了两个连通区域,都包含灰度值小于25的像素点,运行代码9-6所示代码将输出如下内容。


上一篇 下一篇

猜你喜欢

热点阅读