如何获得比 Otsu 更好的阈值图像应用于整个图像

问题描述

我尝试在图像的 ROI 内应用 Otsu 以获得更好的输出。我当前的代码迭代如下所示,我将 Otsu 应用于图像的 45x45 ROI 片段。输出仍然不是最好的,尤其是与自适应阈值方法相比时。我怎样才能获得更清晰、更好的输出?有没有推荐的在 ROI 内应用 Otsu 的另一种方法

def roiOtsu(image):
    size = 45
    column,row,result = properties(image)
    for i in range(0,column,size):
        for j in range (0,size):
            ret,result[i:i+size,j:j+size] = cv2.threshold(image[i:i+size,j:j+size],255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    return result

解决方法

Otsu 的方法适用于双峰图像(直方图有两个峰值的图像),您的图像是双峰的吗?

无论如何

通过分割图像并为您使用自适应阈值的每个补丁计算阈值。大津的阈值应该应用于整个图像,因此不应该这样使用。

您是否尝试过:

otsu_threshold,image_result = cv2.threshold(
    image,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU,)
print("Obtained threshold: ",otsu_threshold)

如果结果仍然不令人满意,您可以转向自适应方法,但要使用正确的算法。你可以从另一个 answer

得到一些很好的解释

希望这对你有用!