2016-08-05 4 views
11

私は2つの画像を持っています(下記参照)。これらの画像は、一対のケーブルの輪郭を表し、レーザベースの3D三角測量を用いて捕捉された。最初のイメージは左のカメラでキャプチャされ、2番目のイメージは正しいカメラでキャプチャされます。図からわかるように、これらの画像は部分的に重複している。第1の画像上の左側の部分は、第2の画像上の左側の部分に部分的に対応する。右の部分についても同様です。私はこれらの2つのイメージを1つのイメージにマージして、対応する部分が重なり合うようにしたい。OpenCVで2つの画像を整列する

これらの画像に続いて、私も自分の処分で、以下の情報を持っている:

  • 3×3のホモグラフィ行列H
  • 左右のカメラのカメラの内部パラメータ、左右のカメラの K
  • を左右のカメラの歪係数D(9個)
  • 左右のオフセットO

このデータは以下のとおりです。ハルコンで

、私は、この使用モザイク行うことを試みた:

  • をハリス
  • 1枚の画像から他の使用RANSACに射影変換行列を計算する使用して、両方の画像における特徴点を抽出します。
  • 見つかった射影変換行列を適用します。

この手法は成功しませんでした。 OpenCVまたはHalcon またはで同様のアプローチを探しています(OpenCVまたはHalconでも同様です)。私は、ホモグラフィ行列やカメラ行列など、私が自由に使用できる較正データを利用しています。

可能であれば、私はマシンビジョンから始めているので十分な説明をしてください。

enter image description here enter image description here

Hl := [0.00175186, 4.73083e-05, -0.00108921, 
     0.000780817, -0.00145615, 0.00118631, 
     0.0534139, -0.030823,  1.0  ] 
Kl := [4578.21, -5.05144, 759.766, 
     0.0,  4576.87, 568.223, 
     0.0,  0.0,  1.0 ] 
Dl := [-0.12573, 0.0533453, -0.575361, -0.0130272, 0.00348033, 0.00852617, -0.0271142, 0.0176706, -0.00575124] 
Ol := [0.0, 150.0] 

Hr := [0.00173883, -2.94597e-05, 0.00109873, 
     -0.00077676, -0.0014687, 0.00121393, 
     -0.0653829, -0.0443924, 1.0  ] 
Kr := [4591.96, -4.55317, 1284.74, 
     0.0, 4591.19,  534.317, 
     0.0,  0.0,  1.0 ] 
Dr := [-0.110751, -0.349716, 3.86535, 0.017393, -0.00364957, -0.00633656, 0.0338833, -0.0212222, 0.00543694] 
Or := [0.0, 100.0] 
+0

あなたはレーザスキャナに対するピクセルの3D点位置へのアクセスを、持っていますか。? (「レーザーベースの3D三角測量を使用してキャプチャされた」) – Micka

+0

いいえ、私はそうは思わない。ホモグラフィやカメラマトリックスなど、利用可能なデータを使ってこれを計算できますか? – JNevens

+0

イメージはレーザースキャナーのような3d三角測量装置でキャプチャされませんか?これらのデバイスは通常、3D点群グリッドをキャプチャします – Micka

答えて

1

テンプレートマッチングは、ここでトリックを行うだろう。私はそれを少しを果たした、あなたはそれがusuful(以下コード)を願って:

enter image description here

MAX_DISPARITY = 100; 
imgL=double(imread('https://i.stack.imgur.com/y5tOJ.png')); 
imgR=double(imread('https://i.stack.imgur.com/L1EQy.png')); 
imgRfused = imgR; 
minmax = @(v) [min(v) max(v)]; 
[imgLbw,n]=bwlabel(imgL); 
nBlobs=2; 
a=arrayfun(@(i) sum(imgLbw(:)==i),1:n); 
[~,indx]=sort(a,'descend'); 
imgLbwC=bsxfun(@eq,imgLbw,permute(indx(1:nBlobs),[3 1 2])); 
imgLbwC =bsxfun(@times,imgLbwC,2.^permute(0:nBlobs-1,[3 1 2])); 
imgLbwC = sum(imgLbwC ,3); 

src = zeros(nBlobs,4); 
dst = zeros(nBlobs,4); 

for i=1:nBlobs 
    [y,x]=find(imgLbwC==i); 
    mmx = minmax(x); 
    mmy = minmax(y); 
    ker = imgL(mmy(1):mmy(2),mmx(1):mmx(2)); 

    [yg,xg]=ndgrid(mmy(1):mmy(2),mmx(1):mmx(2)); 
    src(i,:)=[mmx(1) mmy(1) fliplr(size(ker))]; 


    imgR_ = imgR(:,mmx(1)-MAX_DISPARITY:mmx(2)+MAX_DISPARITY); 
    c=conv2(imgR_ ,rot90(double(ker),2),'valid')./sqrt(conv2(imgR_.^2,ones(size(ker)),'valid')); 
    [yy,xx]=find(c==max(c(:)),1); 
    dst(i,:)=[src(i,1:2)+[xx yy-mmy(1)]+[-MAX_DISPARITY,0] fliplr(size(ker))]; 

    imgRfused(dst(i,2):dst(i,2)+dst(i,4),dst(i,1):dst(i,1)+dst(i,3)) = max(imgRfused(dst(i,2):dst(i,2)+dst(i,4),dst(i,1):dst(i,1)+dst(i,3)),imgL(src(i,2):src(i,2)+src(i,4),src(i,1):src(i,1)+src(i,3))); 
end 
imagesc(imgRfused); 
axis image 
colormap gray 
関連する問題