抗锯齿下采样(Anti-aliasing/down-sampling)-python-numpy 实现

这篇内容会涉及:卷积和抗锯齿下采样。代码请访问:https://github.com/LonglongaaaGo/ComputerVision

如果直接对图片进行上采样,比如说用nearest 线性插值,我们能够发现上采样的图片会有很多锯齿,如上篇从Nearest插值到Bilinear插值的分析与python实现。
其实如果直接进行下采样,也会出现这个问题,效果如图:
抗锯齿下采样(Anti-aliasing/down-sampling)-python-numpy 实现
上图中,左为原图(小修狗),右为下采样图。为了看清楚区别,我特意放大了(不然太小看不清了)。可以看到右侧有一道强烈的锯齿。

抗锯齿下采样(Anti-aliasing/down-sampling)

我们肯定希望是下采样的结果也尽可能平滑,因为那样子看起来更美观。所以就有一种技术叫抗锯齿下采样(Anti-aliasing/down-sampling),这个技术也比较简单,就是两个流程:
1.首先先对图片进行box filter,得到较为平滑的图片。
2. 对平滑的图片进行下采样。

图片来自:https://github.com/holynski/cse576_sp20_hw2
卷积的计算如上图(图片来自),简单来说,我们设置一个filter kernel,然后filter kernel从左上角移动到右下角,得到的点分配给新的特征图。可以看出,它是一个简单的加权求和。

box filter

抗锯齿下采样(Anti-aliasing/down-sampling)-python-numpy 实现
在此基础上,(图片来自),我们设定好一个box filter, 就是用来normalize 这个 N%20%5Ctimes%20M 的区域。 意思就是假设我们设定一个 N%20%5Ctimes%20M 大小的 filter(或者叫kernel),每个单元就是值为 %5Cfrac%7B%5Cmathbb%7B1%7D%7D%7BN%20%5Ctimes%20M%7D 的标量。

最后就是滤波完之后下采样,可以直接Nearest插值,对尺寸都缩放到原来的1/2 即可。具体方法可以访问上篇从Nearest插值到Bilinear插值的分析与python实现。

抗锯齿下采样(Anti-aliasing/down-sampling)-python-numpy 实现
最终效果如图,左边是没有抗锯齿的结果,右边是抗锯齿的结果。可以发现右边的结果要平滑很多,没有锯齿。

具体的实现细节可以看代码,很容易理解。
请添加图片描述

版权声明:本文为博主 Longlongaaago 原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接: https://blog.csdn.net/Willen_/article/details/123159364

共计 人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)