How can I find maximums in the intensity profile and display it in the original image ?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
MMSAAH
el 13 de Sept. de 2019
Comentada: darova
el 17 de Sept. de 2019
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 comentarios
Respuesta aceptada
darova
el 16 de Sept. de 2019
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 comentarios
darova
el 17 de Sept. de 2019
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)
Más respuestas (2)
KALYAN ACHARJYA
el 13 de Sept. de 2019
Editada: KALYAN ACHARJYA
el 13 de Sept. de 2019
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 comentarios
KALYAN ACHARJYA
el 13 de Sept. de 2019
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.
Ver también
Categorías
Más información sobre Detection en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!