我很抱歉图像尺寸。
现在我在数据集中有这两个裁剪的图像。 我打算将这些图像提供给机器学习算法。 在此之前,我想提取二进制数字并将二进制图像输入算法,而不是直接进给。能否详细说明如何实现这种清洁二值化?
我找到了otsu和其他阈值方法,但他们无法在图像中给出清晰的数字。
答案 0 :(得分:2)
我取得了一些成功,但我不知道如何使用其他图像,使用双色量化,转换为灰度和标准化。
我刚刚在 ImageMagick 的命令行中执行了此操作,如下所示:
convert input.png +dither -colors 3 -colors 2 -colorspace gray -normalize -scale 250x result.png
因此,它加载图像并禁用抖动,因此后续量化仅产生2种实际颜色而不是抖动混合。然后,我将数量减少到3种颜色 - 仍然在RGB颜色空间中 - 然后进一步减少到2种颜色。然后,我将这两种颜色转换为灰度并将它们标准化,使较暗的颜色变为黑色,较浅的颜色变为白色。
答案 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#gac2718a64ade63475425558aa669a943a和https://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
convert 19.png \
-colorspace gray \
-auto-level \
-negate \
-lat 20x20+5% \
19_lat.gif
此处处理可选连接组件:
convert 2_lat.gif \
-define connected-components:area-threshold=40 \
-define connected-components:mean-color=true \
-connected-components 4 \
2_lat_ccl.gif
convert 19_lat.gif \
-define connected-components:area-threshold=20 \
-define connected-components:mean-color=true \
-connected-components 4 \
19_lat_ccl.gif
要平滑图像,您可能需要使用栅格来渲染工具,例如potrace。