两个矩阵重叠对角线变换

时间:2017-10-15 10:08:16

标签: matlab matrix

如何计算具有不同维度的2个矩阵之间的重叠区域? 例如600X300和600X650。我们需要计算从左上角到右下角的重叠区域和从相反方向计算的第二个矩阵。

我们已经在下面的代码中看到了第一部分。

[fix_r,fix_c] = size(fix_img);
[float_r,float_c] = size(float_img);
diagLineFix = hypot(size(fix_img,1), size(fix_img,2));
diagLineFlt = hypot(size(float_img,1), size(float_img,2));
diagLine = min(diagLineFix,diagLineFlt);
end_rang = 2*diagLine;
step = 10;
for i = 1:step:end_rang
    float_img_t =0;
    fix_img_t = 0;
    if i <fix_r && i < fix_c
        float_img_t = float_img(1:i+1,1:i+1);
        fix_img_t = fix_img(fix_r - (i):end,fix_c - (i):end);
        if disply == 1 %display the output
            registration_display(fix_img_t,float_img_t);
        end
    end %% more code should be here to complete diagonal transformation 
end

请注意,两个重叠区域应具有相同的尺寸。

1 个答案:

答案 0 :(得分:0)

我发现应用对角线变换的最简单方法是使用imwarp

  1. 我们首先需要创建转换矩阵。我们需要设置t_xt_y如下图所示。

enter image description here

  1. 使用imref2d定义参考图像和浮动图像的空间。

  2. 使用imwarp将转换应用于浮动图像。

我们需要设置t_xt_y(具有所需的值)以沿对角线方向转换浮动图像。

cb = checkerboard(40,20);
cb_ref = imref2d(size(cb));
background = zeros(2000);
bg_ref = imref2d(size(background));
tx = 100;
ty = 100;
T = [1 0 0;0 1 0;tx ty 1];
tform_t = affine2d(T);
[out,out_ref] = imwarp(cb,cb_ref,tform_t);
imshowpair(out,out_ref,background,bg_ref)