文章目录
从算法的角度,拉普拉斯的计算需要两张相邻分辨率的高斯图像(3840x2160,1920x1080),拉普拉斯对低分辨率的图像做上采样、填充之后卷积,然后和高分辨率的图像相减,得到残差(边缘纹理)。
上采样的过程,是行列偶数倍插值“0”的过程,因为低分辨率的图像中灰度值为高分辨率图像的1/4,因此对上采样后的值要x4。(很重要)
填充的圈数和卷积核有关,卷积核3x3,填充1圈0。5x5就填充2圈0。
卷积核是高斯核,权重为1,4,…36,…4,1。高斯的权重本来是0.01左右的小数,将其放大256倍,量化投射到8bit的范围,因此这个卷积计算完毕后,需要做归一化处理,即对结果除以256。
上述x4,/256的过程可以等价为>>6。即对结果进行右移(截掉低位),然后使用uchar对结果进行强制转换,截掉高位,最后得到8bit的像素(Y通道8bit)。很多计算,如果不考虑中间bit的浪费,其实可以最后再截位,从而忽略中间的定点(根据产生数据的实际范围来决定截取哪些位,这是一个经验方法,和上述理论有相通也有违背,因为每张图的灰度存在范围是不同的,会影响截位的效果)
定点是一个比较有意思的话题,这里暂且不提。
5x5的卷积核可以拆分为4个3x3的卷积核,因为上采样的过程填充的0并没有参与计算,因此可以优化。具体方法不提,画图就明白了,分行奇偶数,列奇偶数讨论。
另外两幅图像相减的时候,求得是残差(像素之间的差距),因为应该取差的绝对值。对于8bit的像素,在rtl中都是无符号数计算,不取绝对值,则1-255=2(而非254),119-120=256(而非1)。在计算机里,-255=+1(补码计算)