我正在尝试解决用Java合成两个图像的问题。该程序将拍摄第一张图像的一部分并将其从第二张图像上移过。目标是使两个图像之间的边界不太明显。必须以这样的方式选择边界,使得边界处两个图像之间的差异很小。
我的任务:
编写一种方法来选择两个图像之间的边界。该方法将接收输入图像的重叠部分。必须首先进行转换,以便边界始终从左上角到右下角开始。
注意:返回的图像不应该是连接的图像,而是提供两个图像的哪些部分。
边界线的像素可以用常数(SEAM)标记。第一个图像的像素可以用整数0标记,第二个图像的像素用整数1标记。选择边界线后,可以使用泛光填充算法用0或1填充额外的像素。
注意:图像可以表示为图形,其中每个像素与其左,右,顶部和底部邻居连接。因此,使用洪水填充就像深度优先搜索一样。
必须使用shortest path algorithm
来选择边界,以使其变小。
注意:除了Arrays(甚至不是ArrayList)之外,我不能使用任何java数据结构,或者我可以使用自己定义的数据结构。
伙计们,我是这方面的新手,正在努力解决这个问题。我必须遵循哪些步骤来解决这个问题?或者指向教程的指针会有所帮助。
我的主要问题是:
**我如何将图像表示为Java代码中的图形(例如,使用数组或我自己的数据结构)。 **
我需要有人帮助我解决问题。我需要帮助。
答案 0 :(得分:1)
您可以在边界处对图像中心应用不同的不透明度级别。因此无法识别边缘。
将一个图像固定在另一个图像上并改变透明度。
答案 1 :(得分:0)
以下是对问题“主要问题”部分的回答。
您必须将图像像素表示为图形,并且您只能使用Java数组。好吧,如果你看一个你将需要使用的二维数组代表图像的像素,它可以用作图形,只是数组中的每个项目只有数据值(像素颜色)和附加可以使用以下公式计算当前节点的节点:
Current pixel : [X,Y]
Top pixel : [X,Y-1]
Bottom pixel : [X,Y+1]
Left pixel : [X-1,Y]
Right pixel : [X+1,Y]
注意:X和Y是2D数组中的索引。此外,当递增/递减X或Y以计算相邻像素时,您需要确保不会溢出/下溢图像的边界,即递减不应导致X / Y的值<1。 0和增量不应导致X超出图像宽度,Y不超过图像高度。
参考:http://docs.oracle.com/javase/tutorial/2d/images/index.html