Stretch quadrilateral ROI to pre-definded rectangle size

3 Ansichten (letzte 30 Tage)
Shaun VanWeelden
Shaun VanWeelden am 1 Apr. 2013
Lets say I have a quadrilateral ROI in my image roughly resembling a rectangle. I want to take this ROI and turn the corresponding pixels into lets say a 100x200 rect from that ROI. I am thinking I will probably need to use interp or imtransform for this, but this is something I have very little experience in so if anyone has a few suggestions (or sample code!), that would be great!
-Shaun

Akzeptierte Antwort

Jeff E
Jeff E am 1 Apr. 2013
When I started out learning about image transformations (a process still going on, BTW), using the manual control point selection tool, CPSELECT, was helpful. Take your raw image as one input, and a binary image with a rectangle of your desired dimensions, and pick some points by hand. Export those points to the workspace for use in CP2TFORM, then apply the results transform using IMTRANSFORM.
After you have that process down, then you can figure out how to programmatically replace the manually selected points (if necessary).
  2 Kommentare
Shaun VanWeelden
Shaun VanWeelden am 2 Apr. 2013
Bearbeitet: Shaun VanWeelden am 2 Apr. 2013
Great places to look Jeff, thanks! It still took me quite awhile to figure out what I was doing, here is the partial solution I came up with:
imshow(origImg)
origImgVertex=ginput(4); %select in order: top left, bottom left, top right, bottom right
TFORM=cp2tform(origImgVertex,[1 1; height 1; 1 width; height width],'projective');
newImg=imtransform(origImg,TFORM);
Where height and width are the dimensions of your new rectangle. To avoid ginput when having a ROI, I am sure some simple bwmorph would fix this.
My final question is how would I go about calculating where the vertices I selected in my initial image ended up in my new image?
Thanks!
Shaun VanWeelden
Shaun VanWeelden am 2 Apr. 2013
And actually I figured it out, I just needed to specify additional arguments to imtransform, the results look GREAT now! Here is what I did:
A=imtransform(origImg,TFORM,'XData',[1 Width],'YData',[1 Height],'XYScale',[1 1]);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by