具有模糊图像的自适应阈值

时间:2013-09-05 04:49:51

标签: opencv adaptive-threshold

我正在寻找用于图像二值化的最佳自适应阈值方法。但我对黑暗和模糊的图像有任何问题 输入图片:
Let the Image load...

当我使用自适应阈值方法时,我收到了这个 输出图片
Let the Image load...

这对我不好!
那么,有人可以帮我解决这个问题吗?


另一张图片:enter image description here

和:enter image description here

第一个用@ Hammer解决方案看起来非常糟糕(我必须选择c通道),第二个我可以使用自适应阈值正常。
所以我想为所有案例找到最佳解决方案。

再次感谢!

4 个答案:

答案 0 :(得分:8)

对于图像中的分割而言,颜色似乎比强度更好。尝试将其转换为HSV,然后在H通道上运行OTSU。

在python中

hsv = cv2.cvtColor(image, cv2.cv.CV_BGR2HSV)
cv2.imshow('hsv', hsv[:,:,0])
(thresh, im_bw) = cv2.threshold(hsv[:,:,0], 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('OTSU', im_bw)

给出(hsv)

enter image description here

然后(OTSU)

enter image description here

有点腐蚀和扩张,你应该好好去

答案 1 :(得分:6)

您可能对openCV使用的these自适应阈值感兴趣。

我使用了自适应平均阈值。您可能需要稍微使用参数,但如果您的图像相似(相同大小等),希望不会需要进行太多的调整。

# Smooth image
filtered = cv2.adaptiveThreshold(input_image.astype(np.uint8), 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 41, 3)

# Some morphology to clean up image
kernel = np.ones((5,5), np.uint8)
opening = cv2.morphologyEx(filtered, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel)

结果:

enter image description here

enter image description here

enter image description here

答案 2 :(得分:3)

以下代码......

im=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,111,3)
cv2.imshow('mkm',im)`

...给出了一个好结果:

adaptive image

答案 3 :(得分:1)

如果单个阈值不足以分隔所有图像,您可以尝试使用两个阈值的Watershed algorithm

使用高阈值来获取具有绝对属于数字的片段的图像,以及使用高反向阈值来获取具有绝对不属于数字的片段的图像。

稍微侵蚀两个图像以增加确定性。

然后使用2幅图像作为Watershed的种子。

Here is an answer where this is done