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!