Crop an image using multiple coordinates

I used the "imfreehand" to crop an irregular shape and save its positions into a variable. This position variable is a 85*2 double matrix (85 points, X and Y coordinates). Now, I want to use the same position to crop another image (different layer of the image, but the location of the objects is the same). The functions I can find all requires rectangle positions (X1,X2,Y1,Y2). In my situation, I have 82 different (X,Y) coordinates, how can I use the position information to crop a new image?

 Accepted Answer

Matt J
Matt J on 7 Jul 2018
Edited: Matt J on 7 Jul 2018
You should save the original imfreehand object, h.
h=imfreehand(_____)
Then you can just do
cropped = double(AnotherImage).*h.createMask

More Answers (2)

See my freehand copy and paste demo. It will be easy for you to adapt it.
"I want to crop another image (different layer of the image)." Perhaps you want to mask all the layers/slices of this or another image. So use bsxfun:
% Mask the image using bsxfun() function to multiply the mask by each channel individually.
maskedRgbImage = bsxfun(@times, rgbImage, cast(mask, 'like', rgbImage));
rgbImage can be a color image, or a volumetric (multi-slice) image.

1 Comment

My answer should cover this as well, if you have R2016b or later.

Sign in to comment.

Products

Asked:

on 7 Jul 2018

Edited:

on 7 Jul 2018

Community Treasure Hunt

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

Start Hunting!