Extract horizontal and vertical lines from raster image

7 次查看(过去 30 天)
I am trying to extract horizantal and vertical bars seprately from following raster image.
I am using two combination of functions
First functions combination (parameters value may vary)
SE = strel('line',60,0);
% OR
SE = strel('rectangle',[1 70]);
s=imerode(Iraster,SE);
s=imdilate(s,SE);
Second functions combination
mask = imclearborder(Iraster);
props = regionprops(mask, 'Area');
allAreas = sort([props.Area])
mask = ~bwareaopen(~mask, 10000);
mask = imclose(mask, true(5));
mask = ~bwareaopen(~mask, 10000);
mask = bwareafilt(mask, 1);
barsH = medfilt2(mask, [1, 115]);
props = regionprops(barsH, 'Area', 'PixelList');
allAreas = sort([props.Area])
props = regionprops(barsH, 'Area', 'PixelList');
allAreas = sort([props.Area])
The outcomes are not satisfactory, as outputs are not smooth like in original image.
Are there any other functions that can be helpful ?. I raster.mat is enclosed.

采纳的回答

yanqi liu
yanqi liu 2022-6-7
yes,sir,may be use open and close operation,such as
load Iraster.mat
bw = im2bw(Iraster);
bw2 = imclose(bw, strel('line', 1e2, 0));
bw3 = imopen(bw2, strel('line', 50, 90));
bw3 = imclose(bw3, strel('line', 2e3, 90));
bw3 = imdilate(bw3, strel('disk', 9));
bw3 = logical(bw3.*bw2);
bw4 = logical(~bw3.*bw2);
bw4 = imclose(bw4, strel('line', 3e2, 0));
bw4 = bwareaopen(bw4, 1e3);
bw4 = logical(bw4.*bw2);
figure; imshow(bw2);
figure; imshow(bw3);
figure; imshow(bw4);
  3 个评论
Image Analyst
Image Analyst 2022-6-8
编辑:Image Analyst 2022-6-8
1e2 = 1 * 10 ^ 2 = 100.
1e3 = 1 * 10 ^ 3 = 1000.
format long g
1e2
ans =
100
1e3
ans =
1000

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

产品


版本

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by