How to crop an image inside a boundary ?

조회 수: 21(최근 30일)
Warid Islam
Warid Islam 2019년 7월 17일
답변: Aytaç Tok 2021년 3월 12일
I have an image from which I want to crop a certain portion of it. I drew the boundary at first. Below is the code:
img = imread('Intensity1.jpg');
figure, imshow(img);
% getting a segment
h=drawfreehand();
position = wait(h);
region=uint8(roipoly(img,position(:,1),position(:,2)));
region=region.*img;
figure,imshow(region); title('Segmented Region');
% use bwperim rather than bwboundaries to get an Image of boundary.
boundImg = uint8(bwperim(rgb2gray(region),4));
boundImg(boundImg ~=0) = max(img(:));
figure, imshow(img + boundImg)
% save image without loosing information..
imwrite(img + boundImg, 'writeImg.jpg');
% check
read = imread('writeImg.jpg');
figure, imshow(read)
isequal(read, img + boundImg)
The image is below:
fh.jpg
I want to crop the portion of the image specified by the boundary above. I tried the following line of code but there is no change in the result.
imcrop('Intensity1.jpg');
Any suggestions would be very much appreciated. Thank you.
  댓글 수: 3
Warid Islam
Warid Islam 2019년 7월 22일
Hi Kalyan,
I want to extract the marked ROI only.

댓글을 달려면 로그인하십시오.

채택된 답변

Divya Gaddipati
Divya Gaddipati 2019년 7월 24일
region=uint8(roipoly(img,position(:,1),position(:,2)));
After getting the mask of the selected region from the above line in your code, you can use regionprops to obtain a rectangular box around the mask and then use imcrop to crop the image.
stats = regionprops(region, 'BoundingBox');
crop_region = stats.BoundingBox; % contains [top_left_x top_left_y width height]
cropped_img = imcrop(img, crop_region);
For more information on how to use regionprops and imcrop, refer to the following links:
  댓글 수: 2
Divya Gaddipati
Divya Gaddipati 2019년 7월 26일
Hi,
I assume you are using the wait command to obtain the positions of the selected boundary from.
The drawfreehand command returns an object which contains the positions of the boundary you selected. Hence, instead of using wait command, you can directly access the "Position" parameter of your drawfreehand object (i.e, h).
position = h.Position;
Try the above line in place of "position = wait(h)".
For more information, refer to the "Output Arguments" section in the drawfreehand documentation.

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Aytaç Tok
Aytaç Tok 2021년 3월 12일
How can I get the object by auto cropping from a rgb picture. For example, there is a banana on the table and the background is black. I want to crop this picture and just take the banana and I want no background pixel at all. how can I do that

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by