【问题标题】:Correct image size in image mosaic图像拼接中的正确图像尺寸
【发布时间】:2016-10-07 12:59:04
【问题描述】:

我正在使用 SURF 在 Matlab 中实现图像马赛克。问题是

outputView = imref2d(size(img1)*2);
Ir = imwarp(img2,tform,'OutputView',outputView); 

它产生

我想要这样的东西

如果我改变了

outputView = imref2d(size(img1)*2);

outputView = imref2d(size(img1));

matlab 裁剪第二张图像,以便在转换后适合第一张图像大小。

【问题讨论】:

    标签: image matlab image-processing surf mosaic


    【解决方案1】:

    请注意,当您相对于目标平面扭曲图像时,这个新平面中的许多像素都等于 0。一个非常基本的算法是简单地对图像进行阈值处理,以便找到大于 0 的值,然后找到包含非零像素的最大边界框...然后裁剪:

    [rows,cols] = find(Ir(:,:,1) > 0);
    topLeftRow = min(rows);
    topLeftCol = min(cols);
    bottomRightRow = max(rows);
    bottomRightCol = max(cols);
    
    Ir_crop = Ir(topLeftRow:bottomRightRow, topLeftCol:bottomRightCol, :);
    

    【讨论】:

    • 索引超出矩阵维度。 SURF_with_MATALB 中的错误(第 55 行) Ir_crop = Ir(topLeftRow:bottomRightRow, topLeftCol:bottomRightCol, :);尺寸(Ir)= 898 1354 3 topLeftRow = 1 bottomRightRow = 476 topLeftCol = 250 bottomRightCol = 3706
    • 将第一行更改为[rows,cols] = find(Ir(:,:,1) > 0);,它应该可以工作。
    • 不确定我们是否在谈论相同的问题,但我记得在大学创建马赛克软件时,如果反向投影,这是一种简单的投影方法。您将目标平面投影到原始图像,这样目标的每个像素都会分配给源中的一个像素,从而避免零点问题。
    • 对,我忘了这是彩色图像。 @erfan 的修改有效。我已经编辑了我的帖子。
    • @SembeiNorimaki 我无法判断转换图像中的那些穿孔是否是由于前向转换造成的孔......或者这实际上是墙上设计的一部分。大声笑。
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多