我正在尝试解决用Java合成两个图像的问题。该程序将拍摄第一张图像的一部分并将其从第二张图像上移过。目标是使两个图像之间的边界不太明显。必须以这样的方式选择边界,使得边界处两个图像之间的差异很小。
我的任务:
编写一种方法来选择两个图像之间的边界。该方法将接收输入图像的重叠部分。必须首先进行转换,以便边界始终从左上角到右下角开始。
注意: 返回的图像不应该是连接的图像,而是提供两个图像的哪些部分被使用。
边界线的像素可以用常量(SEAM)
标记。第一个图像的像素可以用整数0标记,第二个图像的像素用整数1标记。选择边界线后,可以使用floodfill
算法用0或1填充额外的像素。
注意:图像可以表示为图形,其中每个像素与其左,右,顶部和底部邻居连接。所以使用洪水填充就像深度优先搜索一样。
必须使用最短路径算法来选择边界,以使其变小。
注意:我不能使用除数组之外的任何java数据结构(甚至不是ArrayList)
伙计们,我是这方面的新手,正在努力解决这个问题。我必须遵循哪些步骤来解决这个问题?或指向教程的指针
答案 0 :(得分:0)
我会这样做:
选择所选边框的宽度。随意。 1.找到像素的最大可能偏移。那是D. 2.对于正方形中的所有可能的移位(+ -D,+ - D),找到边界的k(相关的quocient)。边界是在班次中间拍摄的。 3.具有最大k的转变是最好的。让它被视为理所当然。 4.现在开始移动边框,用“k”以同样的方式检查它。找到它的位置。完成。
如果D很大且过程很长,请在2(或更多)阶段进行。在第一阶段,计数k的步骤很大,最后一步的步骤为1.您也可以使用先前的过滤。
如果可以转动边框或相对图像的位置,则算法不会主要改变 - 仅添加到其中尝试在不同的轻微转动位置之间的最佳k以及稍后转向边界。