Imagemagick:如何从图像中删除网格线和暗区?

问题描述 投票:0回答:1

我有一张带有直线网格(不是垂直或水平)的显微图像。

我知道 ImageMagick 有

-hough-lines
运算符可以检测直线。如何使用它来去除这些线条?

image imagemagick image-manipulation imagemagick-convert hough-transform
1个回答
0
投票

这是在 Imagemagick 中处理图像的一种方法。

(请注意,-hough-lines 仅精确到 1 度。因此它可以找到线,但它们对齐得不够好,无法使用它们进行删除。)

有两个主要步骤。首先找到旋转的角度。第二次旋转图像,然后使用形态学去除水平线和垂直线。

输入:

第一步进行除法归一化以使背景白色均匀,然后进行自动阈值处理,然后进行 -deskew 以获得旋转角度。我包含了 +write xxx.png 以逐步保存图像。您可以删除这些 +write xxx.png,但不能删除 -write mpr:xxx.

angle=`magick gridded_ellipse.jpg -write mpr:img \
\( mpr:img -blur 0x99 \) +swap -compose divide -composite +write gridded_ellipse_div_normalize.png \
-auto-threshold triangle +write gridded_ellipse_threshold.png -deskew 40% +write gridded_ellipse_thresh_deskew.png -format "%[deskew:angle]" info:`

除法归一化:

除法归一化和阈值化:

除法归一化、阈值化和去偏斜:

第二步从之前的划分归一化图像开始并旋转它。然后它采用先前的校正图像并应用水平形态关闭,否定它以使线条在黑色上变白并将其添加到旋转图像中。然后它应用接近去偏斜图像的垂直形态,将其取反以使黑底白字并将其添加到先前水平处理的结果中。这形成了最终结果。

magick gridded_ellipse_div_normalize.png -rotate $angle +write gridded_ellipse_norm_rot.png +write mpr:rot +delete \
\( gridded_ellipse_thresh_deskew.png +write mpr:deskew -morphology close rectangle:50x1 -negate +write gridded_ellipse_thresh_morph_horiz.png  \
mpr:rot -compose plus -composite +write gridded_ellipse_no_horiz.png -write mpr:no_horiz \) \
\( mpr:deskew -morphology close rectangle:1x50 -negate +write gridded_ellipse_thresh_morph_vert.png  \
mpr:no_horiz -compose plus -composite +write gridded_ellipse_result.png \) \
null:

除法归一化和旋转输入:

除法归一化、旋转和阈值输入:

形态关闭水平:

形态关闭水平添加到旋转图像:

形态关闭垂直:

形态关闭垂直添加到以前的结果 - 最终图像:

© www.soinside.com 2019 - 2024. All rights reserved.