How to draw a line perpendicular to the medial axis in each point and save the intensity values?

1 Ansicht (letzte 30 Tage)
Thats what I wrote to get the medial axis (skeleton). im=imread('gray.tif'); skelImg = bwmorph(im, 'skel', inf); figure; imshow(skelImg); hold on;
  2 Kommentare
Adam
Adam am 23 Okt. 2014
Please try to make the 'question' part as short and to the point as possible. The 'body' of the question is where you can put all the "Hi..." stuff. The question is there as a headline to direct people who have the knowledge to help to a thread and those who don't to by-pass it.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Bruno Pop-Stefanov
Bruno Pop-Stefanov am 24 Okt. 2014
Take a look at the file overlayLines.m that I have attached. This function draws red lines over an RGB image. You can certainly modify it for a one-channel image. Also, if you examine the loop you'll see how to find the pixel values that the line crosses.
Example:
I = imread('autumn.tif');
x = [10,200;50,60];
y = [140,160;20,200];
J = overlayLines(I,x,y);
imshow(J)
  1 Kommentar
Hamed Lamei Ramnadi
Hamed Lamei Ramnadi am 28 Okt. 2014
Hi Bruno Thank you for your respond but it did not work out actually. Perhaps you did not get my point. I can draw lines by giving x and y. I need a code to draw these lines PERPENDICULAR to the medial axis in each point.
Cheers

Melden Sie sich an, um zu kommentieren.


Radek
Radek am 28 Okt. 2014
Hi, i have solved same issue. my propasal is this (not the best and quickest solution ever but it works):
1. Calculate angle of the line
if true
% code
Xdiff=X-Gpoint2X-GpointX;
Ydiff=Gpoint2Y-GpointY;
angle=tan(Ydiff/Xdiff);
end
Where Gpoint and Gpoint2 are two points on the line and GpointX is point G X coord
2. do
if true
angle=angle*(-1);
% code
end
to make PERPENDICULAR line
3. use
if true
function [Line LineIndexes]=ComputeLineCoords(angle,GpointX,GpointY, shift,L)
X=size(L,2)
StepElevation=tan(angle)*1
Line(1:X)=round(StepElevation*(1:X)- GpointX*StepElevation +GpointY+shift);
OutOfboundsFromS=min(find(Line(1:X)<1))-1;
OutOfboundsFromE=min(find(Line(1:X)>size(L,2)))+1;
if (OutOfboundsFromS==1)
LineIndexes=[OutOfboundsFromS];
else
if (OutOfboundsFromE==size(L,2))
LineIndexes=[OutOfboundsFromE];
else
LineIndexes=[1];
end
end
OutOfboundsToS=max(find(Line(1:X)>size(L,2)));
OutOfboundsToE=min(find(Line(1:X)<1))-1;
if (Line(OutOfboundsToE)<=1)
LineIndexes=[LineIndexes OutOfboundsToE];
else
if (OutOfboundsToS>=X)
LineIndexes=[LineIndexes OutOfboundsToS];
else
LineIndexes=[LineIndexes X];
end
end
end
To get indexes of pixels in which the line is going (Line) and its bounding box in LineIndexes .
intputs are angle GpointX - Since i wrote it for XY you have to use Y coord of the point where the line should be placed GpointY - Since i wrote it for XY you have to use X coord of the point where the line should be placed shift - 0 should be fine but you hav eto experiment with it a little L - image to get sizes
you might play around a little with the dimensions but this worked for me

Kategorien

Mehr zu Image Processing Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by