图像上的自适应阈值处理导致数据丢失

时间:2014-03-16 05:46:30

标签: python image opencv

我正在使用OTSU确定自适应阈值,然后使用确定的阈值将图像转换为黑色&白色。在这个处理过的图像上,我想进一步确定每个圆的密度,但是我的黑色&白色图像过度校正并导致数据丢失。有关如何调整自适应阈值的任何建议。

im_gray = cv2.imread(img, cv2.CV_LOAD_IMAGE_GRAYSCALE)
(thresh, im_bw) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
img_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

从openCV尝试adaptiveThreshold(),它将根据窗口中的强度计算阈值。似乎OTSU方法在您的情况下不能按预期工作,因为adaptiveTthreshold仅使用平均值(减去常数)并且比使用更优化标准的OTSU更好地工作(见下图)。

还不清楚OTSU的空间范围是什么。如果它是一个完整的图像,那么它应该失败,因为图像的右侧比左侧更模糊,因此黑暗在右侧被冲刷掉。自适应阈值在窗口中进行计算,因此它局部自适应。请注意,下面函数中的最后两个参数是窗口的大小以及在形成阈值时从平均值中减去的值。

adaptiveThreshold(I, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 21, 15);

将OTSU和本地自适应属性放在一起时,您可能会获得更好的结果。但是,白色通常是过采样的,这会导致估计偏差。最好在渐变的两侧进行采样,以获得相同的白色和深色样本。在阈值处理时考虑连通性和颜色甚至更好,请参阅grab cut;

最后,在阈值处理过程中,信息的丢失总是不可避免的。 enter image description here