Asked by MMSAAH
on 13 Sep 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*')

Answer by darova
on 16 Sep 2019

Accepted Answer

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

See attached script

MMSAAH
on 17 Sep 2019

Thank you very much. This did solve my problem. I'm really grateful.

The problem was in fact related to the order of points

Could you explain me more please ? How did the sort () command solve the problem ?

Thanks a lot.

darova
on 17 Sep 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

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

Sign in to comment.

Answer by KALYAN ACHARJYA
on 13 Sep 2019

Edited by KALYAN ACHARJYA
on 13 Sep 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.

MMSAAH
on 13 Sep 2019

KALYAN ACHARJYA
on 13 Sep 2019

MMSAAH
on 14 Sep 2019

Here is the image zoomed. Many points are outside the red curve.

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 5 Comments

## darova (view profile)

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/480235-how-can-i-find-maximums-in-the-intensity-profile-and-display-it-in-the-original-image#comment_745541

## KALYAN ACHARJYA (view profile)

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/480235-how-can-i-find-maximums-in-the-intensity-profile-and-display-it-in-the-original-image#comment_745551

## MMSAAH (view profile)

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/480235-how-can-i-find-maximums-in-the-intensity-profile-and-display-it-in-the-original-image#comment_745582

## darova (view profile)

## Direct link to this comment

https://ww2.mathworks.cn/matlabcentral/answers/480235-how-can-i-find-maximums-in-the-intensity-profile-and-display-it-in-the-original-image#comment_745590

## MMSAAH (view profile)

## Direct link to this comment

https://ww2.mathworks.cn/matlabcentral/answers/480235-how-can-i-find-maximums-in-the-intensity-profile-and-display-it-in-the-original-image#comment_745657

Sign in to comment.