キーポイントを見つけて対応する2つの画像に一致するアルゴリズムであるSURFアルゴリズムを適用しようとしていますが、問題は私の場合、そのアルゴリズムを2つの画像に適用したいのですが、それらは異なる次元であるため、うまくいきません。両方の画像が同じ寸法になるようにするにはどうすればよいか教えてください。
質問する
4234 次
2 に答える
2
それはあなたの問題によって異なります。画像の解像度が同じ場合は、1 つの画像をトリミングするか、1 つの画像を (ゼロで?) ピクセル数に合わせて拡張することをお勧めします。
それ以外の場合は、たとえばinterp2を使用して、画像が同じポイントで定義されるように画像を補間することをお勧めします。
あなたがやろうとしていることの最小限の実用的なコード例を挙げていただけますか?
編集:
あなたが与えたコード例は、画像への読み込みから始まります。
% Example 2, Corresponding points
% Load images
I1=imread('TestImages/lena1.png');
I2=imread('TestImages/testc2.png');
画像を一致させる方法の例をいくつか示します。これらのどれがあなたの場合に意味があるかを決定する必要があります。
方法 1: 両方の画像をトリミングする
nrows = min(size(I1,1), size(I2,1));
ncols = min(size(I1,2), size(I2,2));
% The + floor( ... ) is only for centering the bounding box
croppedI1 = I1( (1:nrows) + floor((size(I1,1)-nrows)/2), ...
(1:ncols)+floor((size(I1,2)-ncols)/2), ...
:);
croppedI2 = I2( (1:nrows) + floor((size(I2,1)-nrows)/2, ...
(1:ncols) + floor((size(I2,2)-ncols)/2), ...
:);
I1=croppedI1;
I2=croppedI2;
方法 2: 画像が一致するまでゼロで拡張する
nrows = max(size(I1,1), size(I2,1));
ncols = max(size(I1,2), size(I2,2));
nchannels = size(I1,3);
extendedI1 = [ I1, zeros(size(I1,1), ncols-size(I1,2), nchannels); ...
zeros(nrows-size(I1,1), ncols, nchannels)];
extendedI2 = [ I2, zeros(size(I2,1), ncols-size(I2,2), nchannels); ...
zeros(nrows-size(I2,1), ncols, nchannels)];
I1=extendedI1;
I2=extendedI2;
方法 3: 2 番目の画像を最初の画像のサイズに合わせます (縦横比が崩れます)。
% Scale the coordinates so that they range from 0 to 1 each.
[X1, Y1]=meshgrid( linspace(0, 1, size(I1,2)), linspace(0, 1, size(I1,1)));
[X2, Y2]=meshgrid( linspace(0, 1, size(I2,2)), linspace(0, 1, size(I2,1)));
nchannels = size(I1,3);
% interpolate each color plane separately
for k=1:nchannels
scaledI2(:,:,k)=interp2(X2, Y2, double(I2(:,:,k)), X1, Y1);
end
%I1=I1;
I2=scaledI2;
于 2012-04-16T04:57:50.123 に答える
0
% code for to play the images or to take same size images into array
r=0;c=0;
a1=imread(filename1);
[r c]=size(a1);
b=imread(filename2);
a2= imresize(b, [r c/3]);
% re-sized second image according to 1st one if u have specific
row col number then you can give like that
a=cat(4,a1,a2); % "a" array having a1 a2 images
implay(a,framerate ); % to play images
于 2013-07-04T17:21:42.020 に答える