2012-01-04 13 views
3

IはMatlabでは、実際の座標系に45度回転した2D座標系で2値画像をスキャンする方法はありますか?

enter image description here

X-Y座標系は、MATLABに付属のデフォルト座標系であり、下図のように二値画像を有します。私はx-y座標系で各行と列のピクセルの合計を得ることができます。

しかし、私はu-v座標系を踏んで画素の合計を求めています。どうすれば入手できますか?

私のアイデアは

1)連続(実数値)座標系 2)XYでの点を見つけるためにXY座標系を変換するためのUV座標の各点に対応する座標でありますシステム。 u-vにおける(1,1)と同様に、x-yにおける(1.26,1.45)に対応する。 3)u-v座標の行と列の合計を取得します。

この点については、 1)空間座標系を作成し、ピクセル座標系を空間座標系に変換する方法は何ですか? 2)空間座標系の小数画素の値を取得する方法は?

ありがとうございました。

答えて

1

実際には、正確に45度の対角線が必要で、ピクセルが正方形(ほとんどの標準カメラでは安全な仮定)であれば、実際には座標変換を行う必要はありません。対角に沿った点のすべてが、例えば、以下のような形を有するという事実を用いることができる。 I(ix, ix), I(1 + ix, ix)。限界を解決するのはちょっと難しいです。 「列」のためにこれを試みる(下左上から対角線右)合計、底部から始まるが、その後上部に、左端を移動、左:

I = eye(5, 4); 
I(4, 1) = 1; 

[nrows, ncols] = size(I); 
colsums = zeros(nrows + ncols - 1, 1); 

% first loop over each row in the original image except the first one 
for ix = nrows : -1 : 2, 
    JX = [0 : min(nrows - ix, min(nrows-1, ncols-1))]; 
    for jx = JX, 
     colsums(nrows - ix + 1) = colsums(nrows - ix + 1) + I(ix + jx, jx + 1); 
    end 
end 

% then loop over each column in the original image 
for ix = 1 : ncols, 
    JX = [0 : min(nrows - ix - 1, min(nrows-1, ncols-1))]; 
    for jx = JX, 
     colsums(nrows + ix - 1) = colsums(nrows + ix - 1) + I(1 + jx, ix + jx); 
    end 
end 

なお距離もし(あなたのような音はありません)、これらの対角に沿った距離はsqrt(2)/2です。

+0

ありがとうございました。私はこれがまさに「ラドン」機能と同じだと思います。これは私がラドンの機能で理解していなかったことを理解するのを助けました。 – Sulla

0

私はmeshgridを使用して画像の座標系を生成します。この座標系はrotation matrixの行列乗算で回転できます。これはあなたに変換された座標を与えるはずですが、それらから値が必要であり、あなたが言ったように、それらは小数画素になります。あなたが補間する最良の方法を決定するのはあなた次第です。 1つの方法は、最も近いピクセル(別名最近傍)の値を使用することです。線形補間では、通常、より良い結果が得られます。隣接するピクセルを取り出し、それらを合計し、ターゲット座標との近さで重み付けします。結果が不満足な場合は、高次補間法だけで気にします。


ご提案手法に代わるものは、あなたが興味を持っている列の縦のピクセルの線積分(合計)を計算し、45度回転して画像を変換するimrotateを使用することです。

+0

を変換している "imrotate" 方法の問題点は、それが結果として、空白画素を導入し、ということです回転の線積分和は、これらの空白画素がエッジに導入されているため、誤った情報を与える。 – Sulla

+0

しかし、空白のピクセルはすべてがゼロであるため、合計には影響しません。 – aganders3

+0

最小のピクセル値を持つ行と列に興味があるので、計算に影響します。 "imrotate"は空白の行と列を導入したので、最小の行/列になります。 – Sulla

1

角度45,135のラドン変換を使用してください。 正確にはになります。
特定の角度のピクセルの合計。ここで

http://en.wikipedia.org/wiki/Radon_transform

I = checkerboard(10,10); 
figure;imshow(I) 
R = radon(I,[45 135]); 
figure;plot(R(:,1)) 

ラドンを説明し、いくつかのイメージが

Image taken from wikipedia

Image taken from Matlab help

+0

ありがとうございます。私は、以前の答えはラドンの実装であることを理解しました。しかし、私はそのユニットをめちゃくちゃにしていました。 1/sqrt(2)の長さと実装は私にはっきりと分かりました。 – Sulla

関連する問題