Cropping an ellipse from an image

I want to extract an elliptical region from the image (part of the front part from the image), preferably in MATLAB:

enter image description here

For example, in this image I want to extract an area from the red border.
Can anyone help me with this?

+6
source share
2 answers

Cropping is simple, all you have to do is apply the appropriate mask. The trick is to create such a mask.

Assuming A is your image, try the following:

 %# Create an ellipse shaped mask c = fix(size(A) / 2); %# Ellipse center point (y, x) r_sq = [76, 100] .^ 2; %# Ellipse radii squared (y-axis, x-axis) [X, Y] = meshgrid(1:size(A, 2), 1:size(A, 1)); ellipse_mask = (r_sq(2) * (X - c(2)) .^ 2 + ... r_sq(1) * (Y - c(1)) .^ 2 <= prod(r_sq)); %# Apply the mask to the image A_cropped = bsxfun(@times, A, uint8(ellipse_mask)); 

The cropped image will be saved in A_cropped . Play with the coordinates of the center and the values ​​of the radii until you get the desired result.

EDIT : I have expanded the solution for RGB images (if matrix A is 3-D).

+11
source

This method is used to trim ellipse faces. This makes the background transparent.

 [FileName,PathName] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files'},'Please Select an Image'); image = imread([PathName FileName]); imshow(image) %needed to use imellipse user_defined_ellipse = imellipse(gca, []); % creates user defined ellipse object. wait(user_defined_ellipse);% You need to click twice to continue. MASK = double(user_defined_ellipse.createMask()); new_image_name = [PathName 'Cropped_Image_' FileName]; new_image_name = new_image_name(1:strfind(new_image_name,'.')-1); %removing the .jpg, .tiff, etc new_image_name = [new_image_name '.png']; % making the image .png so it can be transparent imwrite(image, new_image_name,'png','Alpha',MASK); msg = msgbox(['The image was written to ' new_image_name],'New Image Path'); waitfor(msg); 
+2
source

Source: https://habr.com/ru/post/918339/


All Articles