2017-02-03 8 views
2

저는 MATLAB을 사용하여 이미지의 크기를 조정하려고하는데 쌍 선형 모드를 사용하는 imresize 함수에 대해 직접 이해할 수있는 이상한 것이있었습니다.imresize bilinear MATLAB

어떻게 문제가 있는지 예제를 통해 알려 드리겠습니다. 다음은 1D 행렬입니다.

A: [0 1 2] 
B: [1 2 0 5] 

하는 배율의 선형 보간은 [1,5]는 1 차원 어레이, 지금까지 아는 한, MATLAB에서, 그러나

imresize(A,[1,5],'bilinear') 

A: [0, 0.5, 1, 1.5, 2] 

하게

[0, 0.4, 1, 1.6, 2.0] 

또한

imresize(B,[1,5],'bilinear') 
imresize(B,[1,10],'bilinear') 

마다, 나는 다른 포럼에서 질문과 답변을 많이 발견

[1.0 1.7 1.0 1.5 2.0] 
[1.0 1.1667 1.16111 1.8889 1.0000 0.1111 1.9444 4.1667 5.0000] 

보여주고 그들 중 누구도 나를 보편성의 측면에서, 만족하지 않습니다.

그러나, I '는 imresize.m'코드 라인에서 대답 u 출력 행렬의 인덱스를 결정

u = x/scale + 0.5 * (1-1/scale) 

알았다. 상기에서, 나는 이상한 출력 imresize with bilinear

에 의해 만들어집니다하지만 문제는 내가 0.5 * (1-1/scale)의 의미를 이해하지 , 얼마나 알고 있습니다.

0.5 * (1-1/scale)없이 u = x/scale 진정한 선형 출력

A: [0, 0.5, 1, 1.5, 2] 수 원래 알고리즘을 나타낸다.

그런 다음 왜 0.5 * (1-1/scale)이 필요합니까? 목적과 의미는 무엇입니까?

+0

코드에서 그 행 바로 위에있는 주석은 (내 버전에서 : R2016b) : '입력 - 공간 좌표'를 알려줍니다. 출력 공간에서 0.5가 입력 공간에서 0.5로 매핑되고 출력 공간에서 0.5 + 배율이 입력 공간에서 1.5로 매핑되도록 역 매핑을 계산하십시오 .'. 사실이 줄이 나타나는 코드의이 섹션은 잘 설명되어 있습니다. 각 행에 주석이 달려 있습니다. 의견을 읽고 이해가되는지 확인하십시오. – rayryeng

+1

또한 ** 필자는 ** imresize없이 첫 번째 원칙 **에서 쌍 선형 보간 함수를 작성했습니다. 이 함수가 실제로 기대하는 바를 달성했는지 확인하십시오 : http://stackoverflow.com/questions/26142288/resize-an-image-with-bilinear-interpolation-without-imresize/26143655#26143655. – rayryeng

+0

답변 해 주셔서 감사합니다! 실제로 댓글을 읽었지 만 0.5는 왜 사용합니까? 나는 아직도 그것을 얻을 수 없다. –

답변

1

이미지가 A = [0 1 2] 인 것으로 가정합니다. 그래서 우리는, x는 0 내지 3의 범위를 조정하고, 화소 값의 위치는 그것의 중심이라고 가정

 _________ _________ _________ 
    |   |   |   | 
    | 0 | 1 | 2 | 
    |_________|_________|_________| 

    0 0.5 1 1.5 2 2.5 3 

으로 이미지 픽셀의 구성을 시각화 할 수있다.

이미지 크기를 5 픽셀로 조정하려면 원본 이미지에서 값을 추출해야하는 위치를 찾아야합니다. 그것에 대해 [0:5]3/5을 곱합니다.예를 들어 우리는 이미징 orginal 한 0.9의 위치를 ​​참조한다 스케일링 된 이미지에서 제 2 화소의 값을 찾을 정도

 _____ _____ _____ _____ _____ 
    |  |  |  |  |  | 
    |  |  |  |  |  | 
    |_____|_____|_____|_____|_____| 

    0 3/5 6/5 9/5 12/5 3 

3/5

((0:4) + .5) * 3/5 

ans = 
    0.3 0.9 1.5 2.1 2.7 

의해 우리 ([0:4] + .5) 곱 화소의 중심의 위치를 ​​찾으려면 0.4의 화소의 값을 추출 (보간)한다.

 _____ _____ _____ _____ _____ 
    |  |  |  |  |  | 
    |  | 0.4 | 1 | 1.6 |  | 
    |_____|_____|_____|_____|_____| 

     0.3 0.9 1.5 2.1 2.7 

제의 값과 마지막 픽셀 (일반적으로 이후 그 위치가 화소 [0.5-2.5]) 제 각각 원본 이미지의 마지막 픽셀로 동일하게 설정된다.

 _____ _____ _____ _____ _____ 
    |  |  |  |  |  |  
    | 0 | 0.4 | 1 | 1.6 | 2 | 
    |_____|_____|_____|_____|_____| 
+1

명확한 일러스트와 함께 큰 도움! 고맙습니다. 나는 'u = x/scale + 0.5 * (1-1/scale)'이라는 방정식을 이해할 수 있습니다. 귀하의 예제에서 A [0] = 0은 인덱스 0.5부터 시작하지만, idx 1부터 시작하면 오른쪽의 인덱스 (x/scale + 0.5)에서 0.5 * 1/각 상자의 그림. –