我正在尝试实现 otsu 二值化算法的修改版本。我正在尝试对文档图像进行二值化。但在二值化过程中,我希望对象(在本例中为文本)保留其原始灰度值,而背景取值为 255;也就是白色。我正在发布我在论文中找到的示例图像版本。
这是原始图像:
这是我想要获得的结果图像:
有人可以告诉我如何在Matlab中做到这一点吗?
我正在尝试实现 otsu 二值化算法的修改版本。我正在尝试对文档图像进行二值化。但在二值化过程中,我希望对象(在本例中为文本)保留其原始灰度值,而背景取值为 255;也就是白色。我正在发布我在论文中找到的示例图像版本。
这是原始图像:
这是我想要获得的结果图像:
有人可以告诉我如何在Matlab中做到这一点吗?
我没有方便的 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]
求反和乘法业务是为了保证原始灰度值的保存。我认为,您可以轻松地将其翻译成任何语言。