I need a code that will scan a binary image (on a plot, x vs. y) and provide me with the coordinates of the first black pixel detected across the y-axis of the entire image.
조회 수: 2 (최근 30일)
이전 댓글 표시
1) code to scan the image. I believe the code will function as an iteration.
2) When x=1 the code will scan along the y-axis to provide me with the first black pixel detected and print the coordinates of the black pixel.
3) step 2 will repeat on x=2 where the scan will continue along the y-axis until the first black pixel is detected and print the coordinates of the black pixel.
4) then the scan will continue moving along the x-axis (x=3), up the black pixel where the y coordinates is found.
I hope I have been clear in my explanation.
댓글 수: 3
답변 (2개)
Walter Roberson
2018년 2월 27일
sum(cumprod(YourMatrix~=0))+1
Will give you the index of the first black pixel in each column. In cases where there were none, the value will be one more than the number of rows.
댓글 수: 3
Walter Roberson
2018년 2월 27일
What does the "bottom" mean relative to an array?
There are two ways of presenting images on-screen. If you use the row indices as Y coordinates, then the array values with lowest row indices appear at the bottom of the display, cartesian coordinates. However it is also common to want to have the array values with lowest row indices appear at the top of the display, "table" style (tables usually increase in value as you go downwards.)
The code I posted will find the black pixels with the lowest index -- cartesian coordinate style.
If you want the searching to be from the "bottom" of the array (highest index first) then you can use
size(YourMatrix,1) - sum(cumprod(flipud(YourMatrix~=0)))
This will give 0 for the locations where there were no black pixels in the column.
Image Analyst
2020년 6월 12일
I've posted code like this many, many times. Assume mask is your binary image (black or white, true or false, 1 or 0):
[rows, columns] = size(mask)
topRows = zeros(1, columns);
for col = 1 : columns
t = find(mask(:, col) == 1, 1, 'first');
if ~isempty(t)
topRows(col) = t;
end
end
plot(topRows, 'b-', 'LineWidth', 2);
grid on;
xlabel('column', 'FontSize', 20);
ylabel('Row', 'Fontsize', 20);
If you just have a gray scale image, then call imbinarize() first to get mask.
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!