2015-05-24 3 views
1

Я хочу извлечь прямоугольную область размером (p*hight,p*width,3) изображения. p - двойное значение между [0,1].Получить центральные пиксели изображения в matlab

Этот код работает, но я хотел бы знать, есть ли лучший способ достичь этого?

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

Есть ли какие-либо команды matlab, чтобы получить тот же результат? Может быть, указав только размер прямоугольника и центра изображения?

+0

из любопытства, что неправильно с тем, что вы предоставили? Даже если у Matlab есть встроенная функция, чтобы делать то, что вы хотите, она, вероятно, не слишком отличается от этого. –

+0

Ничего особенного. Но для меня это казалось большим кодом для «простой» задачи. Просто задавался вопросом, есть ли возможность сделать это с меньшим количеством строк кода. – evolved

ответ

4

Если у вас есть Image Processing toolbox, вы могли бы использовать imcrop функции и некоторые математические:

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

EDIT: Или вы могли бы сделать это следующим образом:

[nl, nc, ~] = size(img); 
CenterPixels = img(nl*(1-p)/2:nl*(1+p)/2, nc*(1-p)/2:nc*(1+p)/2, :); 
Смежные вопросы