i want to mark only the highest middle point of binary image but it show the min point too.
이전 댓글 표시

% code
%highest point location
[ y, x] = find(maxImage);
points = [ x y];
[d,idx] = pdist2( points, points, 'euclidean', 'Largest', 1);
idx1 = idx( d==max(d));
p={};
for i=1:length(idx1)
p{end+1} = [ points(idx1(i),1), points(idx1(i),2)];
end
답변 (3개)
What does highest middle point mean?
I don't understand what the code you've written has anything to do with the subject of your question. Your code is finding which two white pixels are the furthest apart. With the image you've displayed, these are indeed the points in red.
If you want to find the highest point, that would be the point whose row ( x) is the smaller, thus:
[row, col] = find(maxImage); %return the coordinates of all the white pixels
highestrow = min(row);
%find all points on highest row:
highestpoints = [row(row == highestrow) col(row == highestrow)]
댓글 수: 10
Nurul Najmah
2015년 4월 23일
Image Analyst
2015년 4월 23일
Explain why my code didn't find the point you want. If the top of your binary image is flat, there are several points that are in the same row. Say what column should be chosen as the "middle".
Nurul Najmah
2015년 4월 23일
Image Analyst
2015년 4월 23일
So my code works then. It finds the highest line.
Nurul Najmah
2015년 4월 23일
편집: Nurul Najmah
2015년 4월 23일
Image Analyst
2015년 4월 23일
You just need to use plot() to mark the point on the image, and maybe subplot() if you want to change the image you're plotting it on. What I did was what your original question asked, and that was to start with your final binary image, like in the lower left of your screenshot above, and find the top line. I don't know why you want to multiply images now.
Nurul Najmah
2015년 4월 26일
Image Analyst
2015년 4월 26일
편집: Image Analyst
2015년 4월 26일
You're asking slightly different things each time, though I'm not sure you realize it. If you want the "highest value of white pixel through row for each column" then you'd scan across columns, extracting one column and use find() to find the first white pixel. See my second answer.
Abdullah bashanfer
2016년 7월 17일
How did you fill the image from bottom? can u provide the codes of that part plz ?
Image Analyst
2016년 7월 17일
Image Analyst
2015년 4월 23일
Try this:
% Find the vertical profile
verticalProfile = sum(binaryImage, 2);
% Find the top row
topRow = find(verticalProfile, 1, 'first');
% Find the center column
centerColumn = size(binaryImage, 2) / 2;
% Plot a dot
plot(centerColumn, topRow, 'r.', 'Markersize', 30);
Image Analyst
2015년 4월 26일
If you want the "highest value of white pixel through row for each column" then you'd scan across columns, extracting one column and use find() to find the first white pixel.
[rows, columns] = size(binaryImage);
for col = 1 : columns
thisColumn = binaryImage(:, col);
topWhitePointRow(col) = find(thisColumn, 1, 'first');
end
topWhitePointRow will be an array that is 1 by columns long where each element has the top most white pixel in each column.
카테고리
도움말 센터 및 File Exchange에서 Image Arithmetic에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


