从高斯搞到拉普拉斯,咱们一步一步地扒开看看

今儿咱们聊聊图像金字塔这事儿,怎么从高斯搞到拉普拉斯,咱一步一步地扒开看看。首先你得明白啥叫图像金字塔,其实它就是把一张原始图按不同的分辨率一层一层拆开了。想象一下叠宝塔似的,往上越小越模糊,往下越大越清晰。这玩意儿在做图像分割或者机器视觉时特别好使,压缩的时候也能派上用场。核心思想就两句话——先往下压一压(降采样),然后再往上还原一下(逆采样)。 常见的金字塔算法主要有两种: 第一就是高斯金字塔。它的干活逻辑特简单:先用高斯平滑给图片打个底,接着亚采样缩小尺寸,每一层都这么干。因为频率随着分辨率的降低而翻倍,所以它能照顾到很宽的频率范围。举个例子,原图先变模糊点,再变模糊点,尺寸也变小一半,看着就像塔尖一层一层地塌下去。 第二就是拉普拉斯金字塔,这属于高斯的逆操作。它主要是记录每一层和上一层之间“先放大再缩小”的差值(也就是残差),这些差值其实就是预测误差。等到需要还原的时候,只要把底层图片放大,然后把这些残差给加上去,就能把上一层的样子给恢复出来。说白了,拉普拉斯金字塔就是给高斯金字塔反向补给信息。 两者的差别一句话就能说明白:高斯一路向下只负责“丢信息”,拉普拉斯一路向上则专门用来“补信息”。 下面咱们就拿OpenCV练练手,亲手搭一座金字塔玩玩: 先导入cv2和plt模块。把图片读进来之后: 对于高斯金字塔向下采样的操作,咱们循环五次就行了。每次调用cv.pyrDown(也就是PryDown)把当前层缩小一下,就能得到下一层。 等到要还原的时候,咱们再从第四层开始往上回溯。这次用cv.pyrUp(PryUp)把它放大回来。注意这里的逻辑是从第4层一直循环到第0层。 把还原出来的图像显示出来看看效果:原始图→模糊→更模糊→尺寸减半→再放大→差不多能恢复原样,这就是整个金字塔的完整旅程啦。