2

魚眼画像を取り、それを各 RGB チャネルの長方形の画像に変換するコードがあります。出力画像が長方形ではなく正方形であるという事実に問題があります。(これは、画像が歪んでおり、水平方向に圧縮されていることを意味します。) 出力マトリックスをより適切な形式に変更しようとしましたが、成功しませんでした。これに加えて、コードが機能するには、入力画像が 500x500 のような正方形でなければならないことも発見しました。この問題を解決する方法はありますか? これはコードです:

このコードは、mathworks での Prakash Manandhar の「Polar To/From Rectangular Transform of Images」ファイル交換に触発されています。

編集。コードが動作するようになりました。

function imP = FISHCOLOR2(imR)

rMin=0.1; 
rMax=1;

[Mr, Nr, Dr] = size(imR); % size of rectangular image 
xRc = (Mr+1)/2; % co-ordinates of the center of the image 
yRc = (Nr+1)/2; 
sx = (Mr-1)/2; % scale factors 
sy = (Nr-1)/2;

reduced_dim = min(size(imR,1),size(imR,2));
imR = imresize(imR,[reduced_dim reduced_dim]);

M=size(imR,1);N=size(imR,2);


dr = (rMax - rMin)/(M-1); 
dth = 2*pi/N;

r=rMin:dr:rMin+(M-1)*dr; 
th=(0:dth:(N-1)*dth)'; 

[r,th]=meshgrid(r,th); 

x=r.*cos(th); 
y=r.*sin(th); 
xR = x*sx + xRc; 
yR = y*sy + yRc; 

 for k=1:Dr % colors
   imP(:,:,k) = interp2(imR(:,:,k), xR, yR);        % add k channel
end

 imP = imresize(imP,[size(imP,1), size(imP,2)/3]);

 imP = imrotate(imP,270);

解決した

入力画像 ←画像リンク

出力画像 ←画像リンク

4

3 に答える 3

1

これは機能するコードです。

function imP = FISHCOLOR2(imR)

rMin=0.1; 
rMax=1;

[Mr, Nr, Dr] = size(imR); % size of rectangular image 
xRc = (Mr+1)/2; % co-ordinates of the center of the image 
yRc = (Nr+1)/2; 
sx = (Mr-1)/2; % scale factors 
sy = (Nr-1)/2;

reduced_dim = min(size(imR,1),size(imR,2));
imR = imresize(imR,[reduced_dim reduced_dim]);

M=size(imR,1);N=size(imR,2);


dr = (rMax - rMin)/(M-1); 
dth = 2*pi/N;

r=rMin:dr:rMin+(M-1)*dr; 
th=(0:dth:(N-1)*dth)'; 

[r,th]=meshgrid(r,th); 

x=r.*cos(th); 
y=r.*sin(th); 
xR = x*sx + xRc; 
yR = y*sy + yRc; 

 for k=1:Dr % colors
   imP(:,:,k) = interp2(imR(:,:,k), xR, yR);        % add k channel
end

 imP = imresize(imP,[size(imP,1), size(imP,2)/3]);

 imP1 = imrotate(imP1,270);
于 2014-04-24T07:11:13.793 に答える
1

I'm not very experienced in the finer points of image processing in MATLAB, but depending on the exact operation of the imP fill mechanism, you may get what you're looking for by doing the following. Change:

M = size(imR, 1);
N = size(imR, 2);

To:

verticalScaleFactor = 0.5;
M = size(imR, 1) * verticalScaleFactor;
N = size(imR, 2);

If my hunch is right, you should be able to tune that scale factor to get the image just right. It may, however, break your code. Let me know if it doesn't work, and edit your post to flesh out exactly what each section of code does. Then we should be able to give it another shot. Good luck!

于 2014-04-24T01:37:41.160 に答える