2013-11-15 7 views

답변

2

보간을 수행해야합니다. 이를 수행 할 수있는 많은 방법이 있습니다. 당신은 이미지 처리 도구 상자가없는 경우 imresize (예를 들어, imgOut=imresize(img,scale,method);가), 또는, 다음 코드를 고려 사용

function imres = resizeim(I,outsize,interpalg) 

if nargin<3 || isempty(interpalg), 
    interpalg='cubic'; 
end 

rows=outsize(1); 
cols=outsize(2); 

vscale = size(I,1)/rows; 
hscale = size(I,2)/cols; 

imgClass = class(I); 
imres = interp2(double(I), (1:cols)*hscale + 0.5 * (1 - hscale), ... 
        (1:rows)'*vscale + 0.5 * (1 - vscale), ... 
        interpalg); 
imres = cast(imres,imgClass); 

참고 :이 거친 시작이다. 사전 필터링 또는 다른 변환을 수행해야하는 경우가 많이 있습니다. 또한 이 예제는 2D (회색 음영) 이미지 만 지원합니다. RGB의 경우 각 색상 평면을 처리하거나 루프의 각 평면을 단순하게 처리하려면이 옵션을 사용합니다. 다시 말하지만, 이것은 단지 예일뿐입니다.

가장자리 처리 외에도 앤티 앨리어싱을 해제 한 imresize (즉, imresize(...,'Antialiasing',false))과 동일한 결과가 나타납니다.

가장자리 처리와 관련하여 extrapval 매개 변수에 대한 내용은 interp2 설명서를 참조하십시오. 코드가 추악 해지 긴하지만 보간 점 (interp2 입력)의 최소/최대 요소를 패치하여 가장자리에 정확하게 매핑하거나 extrapvalNaN을 사용하고 imres을 사용하면 NaN을 다음으로 바꿀 수 있습니다. linspace(1,size(I,1),rows)과 같은 지점에서 간단히 보간하면에 예상되는 눈금이 변경되지 않습니다.

1

또한 이미지를 푸리에 변환하고, 제로 패딩하고, 역 푸리에 변환하고, 절대 값을 취함으로써 sinc 보간을 수행 할 수 있습니다.

im_rz = abs(ifft2(padarray(fft2(im),[row_pad, col_pad])))