过滤二值图像以仅保留线条
Filter Binary Image to keep only the lines
我有下面的图像 initial image and after I've converted it to binary binary image,我想以某种方式只保留显示的 3 行并删除其他对象。我在 Matlab 中使用区域道具等尝试了几件事,但我没有设法过滤掉这些区域。有什么想法吗?
霍夫变换可能是第一种引用方式,但如果对结果不满意,可以尝试使用形态学开,以线作为结构元素。由于您的线条指向几个不同的方向,因此您应该尝试任何可能的方向,然后合并生成图像。如果您对方向有先验知识,您也可以利用它并按方向进行过滤。
示例代码块可能如下所示:
my_img = imread('img.png'); % get your image here
opened=[];
se_length = 25; % chose in pixels, according to your need
for derece = 50:2:70 % use 0:3:180 for all directions
se_line = strel('line', se_length, derece);
opened = cat(3, opened, imopen(my_img, se_line));
end
max_opened = max(opened, [], 3); % merge images based on maximum (or your own method)
形态学开孔可以用来过滤很多形状。只需 select 根据您需要的结构元素。上面的脚本为您的特定图像示例提供了以下结果:
我有下面的图像 initial image and after I've converted it to binary binary image,我想以某种方式只保留显示的 3 行并删除其他对象。我在 Matlab 中使用区域道具等尝试了几件事,但我没有设法过滤掉这些区域。有什么想法吗?
霍夫变换可能是第一种引用方式,但如果对结果不满意,可以尝试使用形态学开,以线作为结构元素。由于您的线条指向几个不同的方向,因此您应该尝试任何可能的方向,然后合并生成图像。如果您对方向有先验知识,您也可以利用它并按方向进行过滤。
示例代码块可能如下所示:
my_img = imread('img.png'); % get your image here
opened=[];
se_length = 25; % chose in pixels, according to your need
for derece = 50:2:70 % use 0:3:180 for all directions
se_line = strel('line', se_length, derece);
opened = cat(3, opened, imopen(my_img, se_line));
end
max_opened = max(opened, [], 3); % merge images based on maximum (or your own method)
形态学开孔可以用来过滤很多形状。只需 select 根据您需要的结构元素。上面的脚本为您的特定图像示例提供了以下结果: