2017-01-19 3 views
0

私はPeter KovesiのMatLab関数をマシンビジョンに使用しています。
私は極座標変換を使用して画像を極座標に変換しています。 Peter Kovesiの機能は「PolarTrans」と呼ばれ、ここにあります。 http://www.peterkovesi.com/matlabfns/#syntheticimagesイメージ変換 - デカルトからポーラー、そしてもう一度(MATLAB)

この機能は、画像を美しく極座標に変換します。しかし、私は逆も起こりたい。 Peter Kovesiはinterp2を使って画像を変換していますが、この変換をどのように逆転させるのか分かりません。 interp2の要件は、入力としてmeshgridが必要であるということです。

簡潔に言えば、変換を逆にすることができますか?極座標かデカルトか。私はそれがピーターの機能に合っていることを望んでいます。つまり、一貫性のために同じパラメータを使用しています。

親愛なるSwjmさん、 コメント欄にスペースがないので、私の返信を投稿しています。
まず、ご返信いただきありがとうございます。あなたはinterp2を逆転させる方法を私に見せてくれました。私は不可能だと思っていました。これは大きな前進です。しかし、あなたのコードは画像の小さな部分だけをマッピングします。私が何を意味するのかを理解するには、以下のデモコードをご覧ください。

clc; clear all; close all; 

gauss = fspecial('gauss',64,15); 
gauss = uint8(mat2gray(gauss).*255); 
[H,W] = size(gauss); 

pim = polartrans(gauss,64,360); 

cim = carttrans(pim,64,64); 

subplot(2,2,1); 
imagesc(gauss); colormap(jet); 
axis off; 
title('Image to be Transformed'); 


subplot(2,2,2); 
imagesc(pim); colormap(jet); 
axis off; 
title('Polar Representation'); 

subplot(2,2,3); 
imagesc(cim); colormap(jet); 
axis off; 
title('Back to Cartesian'); 

subplot(2,2,4); 
diff = uint8(gauss) - uint8(cim); 
imagesc(diff); colormap(jet); 
axis off; 
title('Difference Image'); 
+1

組み込み関数 'pol2cart' – obchardon

+0

があるコメントありがとうございました - あなたはそれがピーターKovesiの機能に応じてどのように働くか私を見るだろうか?基本的には、変換されたイメージを与えられた場合、私が上にリンクした関数の出力とpol2cartの使用方法を教えてください。私はpol2cartに精通していますが、できるだけイメージを保存する逆変換が必要です。 – keyserSoze

+0

この人は同様の困難を抱えているようで、pol2cartは適切ではありませんでした。彼の質問はまだ解決されていません - http://stackoverflow.com/questions/16062335/convert-image-in-polar-to-cartesian-coordinates – keyserSoze

答えて

2

私はKovesiのコードを見てきました。このコードは、逆変換を実行する必要があります。それはあなたがpolartransで '完全な'形と '線形'のマップパラメータを使用したと仮定します。極座標変換は一般に、低い半径値(高い値でのゲイン分解能)で解像度が失われるため、極座標画像が元の画像と同じ寸法であっても、無損失ではありません。

function im = carttrans(pim, nrows, ncols, cx, cy) 

[rad, theta] = size(pim);  % Dimensions of polar image. 

if nargin==3 
    cx = ncols/2 + .5;   % Polar coordinate center, should match 
    cy = nrows/2 + .5;   % polartrans. Defaults to same. 
end 

[X,Y] = meshgrid(1:ncols, 1:nrows); 

[TH,R] = cart2pol(X-cx,Y-cy); % Polar coordinate arrays. 
TH(TH<0) = TH(TH<0)+2*pi;  % Put angles in range [0, 2*pi]. 

rmax = max(R(:));    % Max radius. 

xi = TH * (theta+1)/2*pi; % Query array for angles. 
yi = R * rad/(rmax-1) + 1; % Query array for radius. 

pim = [pim pim(:,1)];   % Add first col to end of polar image. 

[pX,pY] = meshgrid(1:theta+1, 1:rad); 
im = interp2(pX, pY, pim, xi, yi); 
+0

あなたの返事swjmにとても感謝します。あなたのマッピングは小さなセグメントにしかマッピングされていないようです - コードを貼り付けるスペースがないので上記の私の質問を編集しました。これがどうして起こっているのか?あなたは私にinterp2を逆転させる方法を教えてくれて、感謝しています - ありがとう。 – keyserSoze

関連する問題