Extract horizontal and vertical lines from raster image

9 views (last 30 days)
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.

Accepted Answer

yanqi liu
yanqi liu on 7 Jun 2022
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 Comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by