保值的大津二值化

信息处理 图像处理 matlab 阈值
2022-01-03 18:55:39

我正在尝试实现 otsu 二值化算法的修改版本。我正在尝试对文档图像进行二值化。但在二值化过程中,我希望对象(在本例中为文本)保留其原始灰度值,而背景取值为 255;也就是白色。我正在发布我在论文中找到的示例图像版本。

这是原始图像: 在此处输入图像描述

这是我想要获得的结果图像: 在此处输入图像描述

有人可以告诉我如何在Matlab中做到这一点吗?

2个回答

我没有方便的 Matlab,但这是您在OpenCV中的操作方法。下面的示例通过Python (x, y)使用 python 接口:

test = cv2.imread("test.jpg", 0)
(_, otsu) = cv2.threshold(test, 0.0, 255.0, cv2.THRESH_TOZERO_INV + cv2.THRESH_OTSU)
cv2.imshow('otsu', otsu)

这会产生您所需的输出: 在此处输入图像描述

编辑:我没有 Matlab 的副本,但我认为你会这样做(假设你有图像处理工具箱):

使用graythresh获得 Otsu 级别,然后将高于该级别的任何内容设置为白色(或 255)。

I = imread('doc.jpg');
I = rgb2gray(I);
otsuLevel = graythresh(I);
I(I > otsuLevel) = 255;

希望有帮助!

您可以使用 Mathematica 轻松完成:

img = ColorNegate@ColorConvert[Import["../Desktop/sample.jpg"], "Grayscale"]
ColorNegate@ImageMultiply[Binarize[img], img]

求反和乘法业务是为了保证原始灰度值的保存。我认为,您可以轻松地将其翻译成任何语言。

过滤结果