简体   繁体   中英

Get center pixels of image in matlab

I want to extract a rectangular region of size (p*hight,p*width,3) of an image. p is a double value between [0,1].

The follwoing code works but I would like to know if there is a better way to achieve this?

img = imread(ImageName);

% size parameter
p = 0.5;

% store image size
hight = size(img,1);
width = size(img,2);

% calculate the center of the image both in width and hight
% used as reference
centerHight = floor(hight/2);
centerWidth = floor(width/2);

% use half of the actual size of the rectangular region
halfHight = floor(p*hight/2);
halfWidth = floor(p*width/2);

% start index for hight and width
startHight = 1 + centerHight - halfHight;
startWidth = 1 + centerWidth - halfWidth;

% end index for hight and width
endHight = centerHight + halfHight;
endWidth = centerWidth + halfWidth;

% extract center pixels
CenterPixels = img(startHight:endHight,startWidth:endWidth,:);

Are there any matlab commands to get the same result? Maybe by specifying just the size of the rectangle and the image center?

If you have the Image Processing toolbox , you could use the imcrop function and some math:

[nl, nc, ~] = size(img);
CenterPixels = imcrop(img, [[nc nl] * (1 - p) / 2 [nc nl] * p]);

EDIT: Or you could do it like this:

[nl, nc, ~] = size(img);
CenterPixels  = img(nl*(1-p)/2:nl*(1+p)/2, nc*(1-p)/2:nc*(1+p)/2, :);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM