简体   繁体   English

在Matlab中获取图像的中心像素

[英]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*hight,p*width,3)的矩形区域。 p is a double value between [0,1]. p是[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? 是否有任何matlab命令可获得相同的结果? 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: 如果您拥有图像处理工具箱 ,则可以使用imcrop函数和一些数学运算:

[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, :);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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