如何删除水平和垂直线条

Kar*_*ini 3 matlab image-processing

我需要删除二进制图像中的水平和垂直线.有没有过滤这些线的方法?bwareaopen()去除这些线是不好的方法,并且膨胀和侵蚀对这些情况也不好.有人知道解决方案吗?

示例图片:

例

编辑:(添加更多示例图像:

http://s1.upload7.ir/downloads/pPqTDnmsmjHUGTEpbwnksf3uUkzncDwr/example%202.png

图像源文件:

https://www.dropbox.com/sh/tamcdqk244ktoyp/AAAuxkmYgBkB8erNS9SajkGVa?dl=0

www.directexe.com/9cg/pics.rar

Jus*_*tin 6

使用regionprops和移除具有高偏心率(意味着区域长而细)的区域和接近0或接近90度的方向(垂直或水平的区域).

码:

img = im2double(rgb2gray(imread('removelines.jpg')));

mask = ~im2bw(img);

rp = regionprops(mask, 'PixelIdxList', 'Eccentricity', 'Orientation');

% Get high eccentricity and orientations at 90 and 0 degrees
rp = rp([rp.Eccentricity] > 0.95 & (abs([rp.Orientation]) < 2 | abs([rp.Orientation]) > 88));

mask(vertcat(rp.PixelIdxList)) = false;

imshow(mask);
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述