How to crop image using imfreehand and save the output without connecting the boundaries
2 次查看(过去 30 天)
显示 更早的评论
I have an input Image, I want to crop the image using imfreehand with closed boundary option. Unfortunately when I create mask and save the output:
h = imfreehand('Closed',false);
output_mask = h.createMask();
the end points of the cropped region becomes a closed polygon.
This is input file
This is the required output.
I am getting this output
Thanks in advance
0 个评论
回答(2 个)
Matt J
2019-12-19
编辑:Matt J
2019-12-19
I think you simply neglected to trace the full boundary of the shape. Though I traced very quickly and unneatly, the result I get below shows what you should be getting when you trace the full boundary.
6 个评论
Image Analyst
2019-12-20
Your depicted desired output does not show the edges - it shows the entire, filled blob.
Image Analyst
2019-12-19
If you want that output, why not simply binarize the image:
grayImage = imread('image.png');
if ndims(grayImage) == 3
grayImage = rgb2gray(grayImage); % Convert RGB image into gray scale.
end
subplot(1, 2, 1);
imshow(grayImage);
binaryImage = ~imbinarize(grayImage);
subplot(1, 2, 2);
imshow(binaryImage);
It looks like the above image is what you said you want, so why do freehand masking?
4 个评论
Image Analyst
2019-12-20
OK, no explanation for why you need edges - I guess it's proprietary or something.
However my masking demo will allow you to mask freehand-drawn regions with optional cropping into a subimage if you want. Does it not do what you want? You can still detect edges if you feel that is definitely the best approach.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Author Block Masks 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!