How can I find maximums in the intensity profile and display it in the original image ?
조회 수: 2 (최근 30일)
이전 댓글 표시
I have ('liftingbody.png') image and I want to display the intensity profile along a white curve ('sss.png').
I searched the coordinates of the white curve and I displayed the intensity profile of the ('liftingbody.png') along those coordinates.
After that, I searched the maximums in the c profile and I displayed it in the fused image.
My problem is why I got points outside the red curve ? here is my code.
Could anyone help me solving this problem ?
clear all, close all; clc
I2 = imread('liftingbody.png');
figure
imshow(I2);
I=imread('sss.png');
figure
imshow(I);
[x2,y2]=find (I>0); % find the coordinates of white line
[cx,cy,c]=improfile(I2, x2,y2); % display the intensity profile.(cx,xy):coordinates of intensity profile
% [pks,locs] = findpeaks(c);
[pks,locs] = findpeaks(c,'MinPeakDistance',50); % search maximums
figure
plot(c)
% display the curve in red
I = uint8(I);
[x,y,z]=size(I);
for i=1:x
for j=1:y
if (I(i,j)==1)
I(i,j,1)=255;
I(i,j,2)=0;
I(i,j,3)=0;
end
end
end
figure
imshow(I);
title('red curve');
I = imfuse(I, I2,'blend','Scaling','joint');
figure
imshow(I);
hold on
plot(cy(locs(:)),cx(locs(:)),'b*')
댓글 수: 5
채택된 답변
darova
2019년 9월 16일
I think the problem is in order of points. MAthworks help:
improfile
Pixel-value cross-sections along line segments
Try this
I=imread('sss.png');
[x2,y2] = find (I>0); % find the coordinates of white line
figure
imshow(I);
hold on
for i = 1:10:length(x2)
plot(y2(i),x2(i),'.r')
pause(0.1)
end
hold off
And now add this before plot()
[x2 ,ix] = sort(x2); % sort vertically
y2 = y2(ix);
So i divided white line into two parts. Sorted top part vertically and bottom part horizontally
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/238535/image.png)
See attached script
댓글 수: 2
darova
2019년 9월 17일
Imagine you have six pixels. You want to find (rows,columns) (position) of them
So order of pixels would be as i marked on the picture
![111Untitled.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/238676/111Untitled.png)
Arrows indicate direction of search
So when you have some curve (marked black) and points (red) you have to find improfile
Blue lines will be the actual path of profile
![12Untitled.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/238677/12Untitled.png)
추가 답변 (2개)
KALYAN ACHARJYA
2019년 9월 13일
편집: KALYAN ACHARJYA
2019년 9월 13일
My problem is why I got points outside the red curve ? here is my code?
scatter(cy(locs(:)),cx(locs(:)),'b')
I dot think there are any points positioning the outside the Marker line (white line turned red line), use other plot way and see the results.
![345.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/238195/345.png)
댓글 수: 3
KALYAN ACHARJYA
2019년 9월 13일
May be there are few white pixels, just near the boundary. When I executed the code, all points are lie on the white line (as showed result)...again trying to visulize the plot.
참고 항목
카테고리
Help Center 및 File Exchange에서 Detection에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!