图像处理(五):二维泊松重建
概念介绍
假如我们知道一个二维图像边缘的像素值,及其每个像素位置的梯度,我们可以还原出原图像。
我们定义邻居像素集合为四联通域 则问题满足以下关系
v(i,j) - v(i-1, j) = s(i,j) - s(i-1, j)
v(i,j) - v(i+1, j) = s(i,j) - s(i+1, j)
v(i,j) - v(i, j-1) = s(i,j) - s(i, j-1)
v(i,j) - v(i, j+1) = s(i,j) - s(i, j+1)
4*v(i,j) - v(i-1, j) - v(i+1, j) - v(i, j-1) - v(i, j+1) = 4*s(i,j) - s(i-1, j) - s(i+1, j) - s(i, j-1) - s(i, j+1)
我们可以看到,问题转化之后,等式的左边就是拉普拉斯的离散形式表达。
对于此任务,我们将对一个简单的图像计算laplacian,然后从该laplacian重构原始图像
对于三通道图像,单独对每个通道进行处理
代码实现
计算拉普拉斯(梯度)
from pylab import *
import imageio as imio
import numpy as np
import scipy.ndimage as nd
import scipy.sparse
im = imio.imread("data/test.png")[:,:,:3]/255.
def Laplacian(im):
laplacian_kernel = np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0