MATLAB: Cropping an image using imfreehand()

computer visioncroppingimage processingImage Processing Toolboxmaskmasking

I want to crop the ROI from an image using imfreehand() but I am not able to. How can I crop an using imfreehand(). Would cropping the ROI also affect the qualtiy of the ROI as a whole. If it would affect the ROI then what is the solution?
imshow('cameraman.png');
h = imfreehand();
position = wait(h);
What am I supposed to do after this to get the ROI without losing the quality? Thanks in advance.

Best Answer

Try this:
grayImage = imread('cameraman.tif');
imshow(grayImage);
subplot(1, 2, 1);
imshow(grayImage);
fontSize = 20;
title('Double click inside to accept it.', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0.04, 1, 0.96]);
promptMessage = sprintf('Click and drag out a region.\nDouble click inside to quit.\nor Quit processing?');
titleBarCaption = 'Continue?';
buttonText = questdlg(promptMessage, titleBarCaption, 'Draw', 'Quit', 'Draw');
if contains(buttonText, 'Quit')
return;
end
h = imfreehand();
position = wait(h)
% Make integers
position = round(position);
% Find cropping limits.
col1 = min(position(:, 1))
col2 = max(position(:, 1))
row1 = min(position(:, 2))
row2 = max(position(:, 2))
% Do the crop
croppedImage = grayImage(row1:row2, col1:col2);
% Show the cropped image.
subplot(1, 2, 2);
imshow(croppedImage);
title('Cropped Image', 'FontSize', fontSize);
0000 Screenshot.png