实例一(LCD屏幕脏污检测)
https://stackoverflow.com/questions/27281884/low-contrast-image-segmentation
测试图像:
标注脏污区域:
分析与说明:上图中的脏污图像因为对比度较低,所以无法通过常用的阈值方法处理提取,有时人眼观察也较费劲。常用的方法有梯度提取或频域提取。
链接主题中提到了Kmeans聚类分割后提取:
二分类:
三分类:
乍一看效果还不错,但问题是我到底应该设置几个类别?第一张图我如何确定哪个区域正好是我的缺陷部分?本文采用了梯度方法来检测。
实现步骤与演示
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(15,15),0)
x = cv2.Sobel(blur,cv2.CV_16S,1,0,ksize=7)
y = cv2.Sobel(blur,cv2.CV_16S,0,1,ksize=7)
absX = cv2.convertScaleAbs(x) # 转回uint8
absY = cv2.convertScaleAbs(y)
edged = cv2.addWeighted(absX,1,absY,1,0)
cv2.imshow('Sobel', edged)
k1=np.ones((11,11), np.uint8)
thres = cv2.morphologyEx(thres, cv2.MORPH_ERODE, k1)#膨胀操作
cv2.imshow('MORPH_ERODE',thres) #结果显示
contours,hierarchy = cv2.findContours(thres, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt)
if w > 2 and h > 2:
cv2.drawContours(img,cnt,-1,(0,0,255),1)
图像二:
—THE END—
下载1:Pytorch常用函数手册
欢迎加入CV学习交流微信群!