2013-04-26 2 views
1

Я использую MATLAB R2012a, и я пытаюсь разрешить пользователю обрезать изображение БЕЗ использования встроенной функции.

вот мой код:
MATLAB help обрезка изображения

[x, y] = ginput(2); 
m1 = [x(1), y(1)]; 
m2 = [x(2), y(2)]; 
m1 = int16(m1); 
m2 = int16(m2); 
[m, n] = size(manip); 
s1 = (m2(1) - m1(1))+1; 
s2 = (m2(2) - m2(2))+1; 
temp = zeros([s1, s2],('uint8')); 
p1 = 0; 
p2 = 0; 
for c1 = 1:m 
    if ((c1 <= m1(2)) && (c1 >= m2(2))) 
     for c2 = 1:n 
      if ((c2 <= m1(1)) && (c2 >= m2(1))) 
       temp(p1, p2) = manip(c1, c2); 
      end 
      p2 = p2 + 1; 
     end 
    end 
    p1 = p1 + 1; 
end 
out = temp; 



и вот мой результат:
results of the cropping

Любые идеи о том, что я сделал неправильно, я, кажется, чтобы быть в состоянии видеть это. Благодарю.

ответ

1

Я бы предположил, что ваша ошибка здесь: s2 = (m2(2) - m2(2))+1; должно ли это быть не s2 = (m2(2) - m1(2))+1;?

Однако вам не нужен этот цикл вообще:

Iold = rand(300); 
%crop 10 pixels off each side 
Inew = Iold(11:end - 10, 11: end - 10); 

или если вам нужны изображения одинакового размера, но с нулями, где обрезанные биты являются:

Inew = zeros(size(Iold)); 
Inew(11:end - 10, 11: end - 10) = Iold(11:end - 10, 11: end - 10);  

или обобщать его:

Inew(xmin:xmax, ymin:ymax) = Iold(xmin:xmax, ymin:ymax); 
Смежные вопросы