用Java合成两个图像

问题描述 投票:-3回答:2

我正在尝试解决用Java合成两个图像的问题。该程序将获取第一张图像的一部分,并将其粘贴到第二张图像上。目的是使两个图像之间的边界不太明显。选择边界时,必须确保边界处的两个图像之间的差异很小。

我的任务:

编写一种选择两个图像之间边界的方法。该方法将接收输入图像的重叠部分。必须首先对其进行转换,以使边界始终从左上角到右下角开始。

[注:返回的图像不应是合并的图像,但应提供使用了两个图像的哪个部分。

边界线的像素可以用常量(SEAM)标记。第一幅图像的像素可以标记为整数0,第二幅图像的像素可以标记为整数1。选择边界线之后,可以使用Floodfill算法用0或1填充多余的像素。

注:图像可以表示为图形,其中每个像素与其左,右,上和下相邻像素相连。因此,使用洪水填充就像深度优先搜索。

必须使用“最短路径算法”来选择边界以减小边界。

注:除了数组(我什至不是ArrayList),我不能使用任何Java数据结构,也可以使用自己定义的数据结构。

我在这个领域是新手,正在设法解决它。我必须遵循什么步骤来解决此问题?

我的主要问题是,如何在Java代码中将图像表示为图形(例如,具有数组或我自己的数据结构)?

java algorithm image image-processing
2个回答
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的值小于0并且递增不应使X超出图像宽度,Y超出图像高度。

参考:http://docs.oracle.com/javase/tutorial/2d/images/index.html


1
投票

您可以在图像中心的边界处应用变化的不透明度级别。因此无法识别边缘。

请参见http://sreejithvs999.wordpress.com/2013/06/12/transparent-image-composition-in-java-fixing-an-image-over-another-with-changing-opacity-or-alpha-of-pixels/

其中一张图像固定在另一张图像上,透明度不断变化。

© www.soinside.com 2019 - 2024. All rights reserved.