how can i select labeled images that are touching a specific axis,like x-axis,y-axis,and their paralel axis,also the one touches 2 axis at the same time,forexample touches x-axis and its paralel axis at the same time
2 views (last 30 days)
Show older comments
in some cases i want to detect the one touches an specific border,forexample x-axis,or the parallel axis to it,or y-axis or the parallel axis to it,and in some cases i want to remove the ones whom are touching these axis,and also is it possible to select the one which touches 2 axis at the same time,mostly in my case there are some labeled images which are touching both x-axis and its parallel axis(like one of the blobs in the picture,,so im going to select them,and segment them once more,after removing the ones whom only touch x-axis,and in case of margines,im goint to remove some labels whom touch the y-axis or its parallel axis,and x-axis at the same time,so if you can tell me how i can select the one whom touching each border seperately,and also selecting the one touching 2 border at the same time,
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/150739/image.jpeg)
i want to detect blobs which are shown in the picture seperately,once select the one touching the x-axis...imclearborder remove all blobs touching all 4 borders,
0 Comments
Accepted Answer
Image Analyst
on 30 May 2015
To get rid of objects touching just one border is simple. Simply store the 3 edges of the image that you want to keep. Then zero out those 3 edges and call imclearborder(). Then restore the 3 edges that you zeroed out. Let's say you wanted to delete blobs touching the bottom edge only. Then
% Save 3 edges.
topEdge = binaryImage(1, :);
leftEdge = binaryImage(:, 1);
rightEdge = binaryImage(:, end);
% Zero 3 edges.
binaryImage(1, :) = false;
binaryImage(:, 1) = false;
binaryImage(:, end) = false;
% Get rid of blob(s) touching bottom edge
binaryImage = imclearborder(binaryImage);
% Restore the 3 edges.
binaryImage(1, :) = topEdge;
binaryImage(:, 1) = leftEdge ;
binaryImage(:, end) = rightEdge ;
You could build all that into a function where you pass in the edge(s) you want to remove from.
7 Comments
Image Analyst
on 2 Jun 2015
sara, I didn't even have to modify the function I just wrote off the top of my head. It worked beautifully. Here, see the attached test2 m-file for a complete demo to read in rice and threshold and remove the blobs touching the top border.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/183737/image.jpeg)
More Answers (1)
sara
on 7 Aug 2015
3 Comments
Image Analyst
on 8 Aug 2015
The only way I know how to do that is to use the code I gave to delete those touching the top, then find the ones touching the top. Then do the same for the bottom. Then AND those two images to get the blobs that touch BOTH the top and bottom and OR it in with the image to replace it.
Another option is to ask regionprops for the PixelList and examine it for row values of 1 and the last row.
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!