假设我已经计算了(灰度图像的)梯度。
梯度是 X 和 Y 方向上相邻像素之间的差异。
我可以计算图像回来,有这个梯度信息?
我可以以某种方式过滤梯度数据,以便反向操作给出一些合理的结果吗?
假设我已经计算了(灰度图像的)梯度。
梯度是 X 和 Y 方向上相邻像素之间的差异。
我可以计算图像回来,有这个梯度信息?
我可以以某种方式过滤梯度数据,以便反向操作给出一些合理的结果吗?
梯度是两个相邻像素的颜色之间的差异。要取回图像,您需要一条信息:边界像素的初始颜色。
就像在数学中一样,只要涉及常数项,就可以通过积分来反转推导。或者,如果你有,只有在你也知道的情况d = a - b
下才能回来。a
b
如果没有边界值,您仍然可以恢复图像,但不能以相同的饱和度和对比度恢复。整个图像中将缺少一个常数项。
例子
考虑一个只有 3 个像素的图像:42, 142, 100
. 梯度将是0, 100, -42
(将其计算为当前像素与前一个像素之间的差异)。为了取回初始图像,我们假设第一个像素是0
,然后做加法而不是减法:恢复的图像将是0, 100, (100-42)
. 如您所见,添加42
到所有这些将使我们返回初始图像。
就在这里。正如Mihai的回答所述,它基本上是整合。
这项任务的一项著名工作是Pérez 等人的Poisson Image Editing 。你应该看看论文中的图片,也许尝试实现它(这是图像处理课程中的经典作业)。
对梯度场进行积分是一项常规操作,即Shading和Photometric Stereo中的Shape,其中获得表面法线然后积分。为了确保获得合理的结果,您必须强制执行可积性约束。关于这个主题有几篇论文。你可以试试这个标题为An Algebraic Approach to Surface Reconstruction from Gradient Fields的文章。作者提供了 MATLAB 代码。