我有两张照片(见下文)。这些图像表示一对电缆的轮廓,并使用基于激光的三维三角剖分来捕获。第一图像是用左摄像机拍摄的,第二图像是用右摄像机拍摄的。可以看到,这些图像部分重叠。第一图像上的左侧部分与第二图像上的左侧部分相对应。正确的部分也是如此。我想把这两个图像合并成一个图像,这样相应的部分就会重叠。
除了这些图片,我还有以下信息可供使用:
HKD (9 )O此数据如下所示。
在Halcon,我尝试用马赛克来做这件事:
然而,这一做法并不成功。我正在寻找类似的方法,在OpenCV或Halcon 或中,一种方法(也在OpenCV或Halcon中)利用我所拥有的校准数据,例如同形矩阵和摄像机矩阵。
请提供充分的解释,如果可能的话,因为我只是从机器视觉开始。


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]发布于 2016-11-10 22:24:39
模板匹配将在这里发挥作用。我玩了一会儿,希望你觉得它很有用(下面的代码):

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 grayhttps://stackoverflow.com/questions/38791748
复制相似问题