How to scan an image to find out the row or column that will be the first background pixel?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Zara Khan
am 19 Feb. 2018
Bearbeitet: Zara Khan
am 21 Feb. 2018
I have a binary image. I have to scan the image from centroid to its right to find out row consisting of first background pixels ,then centroid to left side and from centroid to top. in each case I have to find out the distance between two columns and rows and find out the max distance.
0 Kommentare
Akzeptierte Antwort
Guillaume
am 19 Feb. 2018
Bearbeitet: Guillaume
am 19 Feb. 2018
As pointed out by Walter, background is normally black, so you need to invert the image. Finding out the centroid is trivial with regionprops and from there it's also easy to find the boundary pixels.
bwimg = ~yourimage; %invert image so that background is black
props = regionpros(bwimg, 'Centroid');
assert(numel(props) == 1, 'more than one object found in image');
centroid = round(props.Centroid);
left = find(bwimg(centroid(1), :), 1)
right = find(bwimg(centroid(1), :), 1, 'last');
top = find(bwimg(:, centroid(2)), 1);
bottom = find(bwimg(:, centroid(2)), 1, 'last');
edit: capitalisation of Centroid and rounding of value
17 Kommentare
Guillaume
am 21 Feb. 2018
This is really basic matrix indexing so I don't understand why you can't work it out on your own
subimage = image(toprow:bottomrow, leftrow:rightrow);
replace toprow, bottomrow, leftrow and rightrow by whichever coordinate you're interested in. In this latter case,
subimage = image(top:centroid(2), centroid(1):right);
Weitere Antworten (1)
Walter Roberson
am 19 Feb. 2018
The distance in each case is 0. The centroid is inside the background area, so the distance to background is zero.
A note in this regard: in binary images, 0 is background and 1 is foreground.
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!