二值化图像

时间:2017-11-22 22:46:12

标签: image image-processing computer-vision

Cropped Image 1

Cropped Image 2

Binarized Image

我很抱歉图像尺寸。

现在我在数据集中有这两个裁剪的图像。 我打算将这些图像提供给机器学习算法。 在此之前,我想提取二进制数字并将二进制图像输入算法,而不是直接进给。能否详细说明如何实现这种清洁二值化?

我找到了otsu和其他阈值方法,但他们无法在图像中给出清晰的数字。

2 个答案:

答案 0 :(得分:2)

我取得了一些成功,但我不知道如何使用其他图像,使用双色量化,转换为灰度和标准化。

我刚刚在 ImageMagick 的命令行中执行了此操作,如下所示:

convert input.png +dither -colors 3 -colors 2 -colorspace gray -normalize -scale 250x result.png

因此,它加载图像并禁用抖动,因此后续量化仅产生2种实际颜色而不是抖动混合。然后,我将数量减少到3种颜色 - 仍然在RGB颜色空间中 - 然后进一步减少到2种颜色。然后,我将这两种颜色转换为灰度并将它们标准化,使较暗的颜色变为黑色,较浅的颜色变为白色。

enter image description here

enter image description here

答案 1 :(得分:2)

另一种方法,就像Mark Setchell所建议的那样,在ImageMagick中转向OpenCv相当简单。 OpenCV具有自适应阈值,请参阅https://docs.opencv.org/3.3.1/d7/d4d/tutorial_py_thresholding.html和连接组件处理,请参阅https://docs.opencv.org/3.1.0/d3/dc0/group__imgproc__shape.html#gac2718a64ade63475425558aa669a943ahttps://www.pyimagesearch.com/2016/10/31/detecting-multiple-bright-spots-in-an-image-with-python-and-opencv/

1) convert to grayscale
2) stretch image to full dynamic range
3) apply local (adaptive) thresholding
4) optionally use connected components labelling to remove regions smaller than some total number of pixels (area).


convert 2.png \
-colorspace gray \
-auto-level \
-lat 20x20+10% \
2_lat.gif

enter image description here

convert 19.png \
-colorspace gray \
-auto-level \
-negate \
-lat 20x20+5% \
19_lat.gif

enter image description here

此处处理可选连接组件:

convert 2_lat.gif \
-define connected-components:area-threshold=40 \
-define connected-components:mean-color=true \
-connected-components 4 \
2_lat_ccl.gif

enter image description here

convert 19_lat.gif \
-define connected-components:area-threshold=20 \
-define connected-components:mean-color=true \
-connected-components 4 \
19_lat_ccl.gif

enter image description here

要平滑图像,您可能需要使用栅格来渲染工具,例如potrace。