gpt4 book ai didi

python - 如何使用python3检测缺陷bean

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:01 24 4
gpt4 key购买 nike

normal bean sample

defect bean sample-1

我想判断这个bean是正常的还是有缺陷的。我尝试使用 Canny 方法(寻找边缘)等等......但我失败了。我只是用形状来解决它。( splinter 的 bean 和未成型的 bean ......)请给我一些解决办法。

对不起我的英语,它不是我的第一语言。

最佳答案

在图像中“填充裂缝”的最广泛使用的方法之一是膨胀腐 eclipse 。简单地说,你让你的二进制图像在边缘“增长”,所以裂缝被填充,然后你反转这个过程并让它在边缘“收缩” - 但是,由于裂缝已经被填充,没有关于它们留在图像中,因此它们保持填充状态。或许,您可以使用它,然后查看原始图像和扩张腐 eclipse 后图像之间的差异:如果裂缝很少或没有裂缝,则差别很小或没有,如果裂缝很多,则会有差异很大。

例如。让我们将图像转换为二进制黑白蒙版:

def get_th_binary_mask(img):
gs = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gs, 0, 255, cv2.THRESH_BINARY)
mask = np.zeros(thresh.shape, np.uint8)
mask[thresh == 255] = 0
mask[thresh == 0] = 1
return mask

现在,只需对矩阵的元素求和,得到白色像素的数量,扩张-腐 eclipse ,再次求和,减去和:

def get_de_difference(binary_image):
s_before = np.sum(binary_image)
kernel = np.ones((17, 17), np.uint8)
d = cv2.dilate(binary_image, kernel, 1)
d = cv2.erode(d, kernel, 1)
s_after = np.sum(d)
return abs(s_after - s_before)

对于“好”bean,它给出了 72 个不同的像素,对于“坏”bean,它给出了 1158 个像素。

可以通过使用更复杂的阈值函数进一步改进,例如,基于 Otsu 和 Grab cut:

def get_gc_binary_mask(img):
gs = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gs, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

mask = np.zeros(thresh.shape, np.uint8)
mask[thresh == 255] = cv2.GC_PR_BGD
mask[thresh == 0] = cv2.GC_FGD

bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)

cv2.grabCut(img, mask, (0, 0, 1365, 767), bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK)

mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
return mask2

使用它而不是前一个,“好”bean 仅产生 1 个像素差异(尽管有一个不幸的伪像 - 见下文),而“坏”bean 则为 741。或者,如果您可以更改背景你的照片,只需在拍照前放一些亮绿色/蓝色的纸,然后使用色度键控。

这是它的外观,从左到右:原始图像(第 1 列)、基本阈值、膨胀、腐 eclipse 、otsu/grabcut 阈值、膨胀、腐 eclipse 。重要的是第 2 列和第 4 列之间以及第 5 列和第 7 列之间的区别。 enter image description here

关于python - 如何使用python3检测缺陷bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com