2016-06-28 3 views
0

그래서 현재 찍은 사진을 보정하기 위해 2 차원 행렬을 채우는 중입니다. Matlab, 두 벡터 사이의 데이터 보간

그래서 만든 수행합니다

vector1 = linspace(0.037, 0.03175, 256); 

이 벡터가 이상적으로 행렬의 첫 번째 행입니다.

난 후 다른 벡터를 가지고

vector2 = linspace(0.0288, 0.0277, 256); 

vector2vector1 사이를 보간 그들을 Row 1 = vector1Row 168 = vector2로 매트릭스에 삽입해야 할 방법이 있는지 궁금.

총 168 개의 행과 256 개의 열이 있어야합니다.

도움을 주시면 감사하겠습니다.

차라리 .... 168 개 행을 수동으로 수행 할 필요가 없습니다 것

당신은 둘 사이의 간단한 선형 보간을 원하는 경우에

답변

2

, 당신은 벡터 V1V2의 각각에 가중치를 적용하고 함께 추가 할 수 있습니다 . 상단에서 V11으로, 그리고 V20으로 가중되어야합니다. 마찬가지로 하단의 V21으로, 그리고 V10으로 가중되어야합니다. 그 밖의 모든 곳에서는 가중치가 1에 추가되어야하며 행의 위 또는 아래까지의 거리에 따라 V1V2이됩니다. 우리는 V1V2의 가중 버전을 만든 다음 V3를 얻기 위해 함께 결과를 추가하는 행렬 곱셈을 사용할 수 있습니다

V3 = alpha * V1 + (1 - alpha) * V2; 

.

nRows = 168; 

alpha = linspace(1, 0, nRows); 
V3 = alpha(:) * V1 + (1 - alpha(:)) * V2; 
2

다음과 같이 당신은 interp1를 사용할 수 있습니다 특정 응용 프로그램에 대한

m = interp1([1 2],[vector1;vector2],linspace(1,2,168)) 
+0

굉장! 완벽하게 일했다. 고맙습니다. – user2852630

+0

다음에 upvote \ accept 대답을 부탁드립니다. :) – bla

+0

다른 보간 방법 (스플라인, 큐빅 등)으로 재생할 수도 있습니다. interp1의 문서를보십시오 – bla

1

동안은 아마 잔인한,하지만 당신은 입력 포인트를 사용하여 2D 쌍 선형 보간을 수행 할 수 griddata를 사용할 수 있습니다.

H = 168; 
W = 256; 
vector1 = linspace(0.037,0.03175,W); 
vector2 = linspace(0.0288,0.0277,W); 
[Wmat,Hmat] = meshgrid(1:W,1:H); 
img = griddata([1:W,1:W],[ones(1,W), H*ones(1,W)],[vector1 vector2],Wmat,Hmat,'linear') 

결과가 올 것 같다 :이 특정한 경우에 나는 결과는 아마 동일합니다 믿고 있지만 이는 반드시 데이터의 수동 1D 보간과 같은 결과를 제공하지 않을

>> all(abs(img(1,:)-vector1)<1e-10) 

ans = 

    1 

>> all(abs(img(end,:)-vector2)<1e-10) 

ans = 

    1