写作动机
最近写打马赛克的算法,查了很多博客,用的都是左上角元素填充。 通过各种搜索和计算,最终总结发现了一个规律: 马赛克边长为色块区域边长的整数倍时,临近采样后的结果等同于用左上角元素填充。
知识背景
所谓插值,是用于图像放大的一种图像处理方式,临近插值是最简单最常用的放大方式之一,很多图像放大算法都是临近差值。若想将 的图片放大为 , 则其计算公式为:
其中为 目标图片的轴像素, 为原图片的轴像素。
在做打马赛克的算法时,用左上角像素填充色块算是临近采样的一种。 无论是采样还是插值,其根本思想是临近的概念。总的来说,意思就是:目标图片的目标像素要取原图像的哪个像素呢? 目标像素后 取整。
结论:
设 ,若, 即目标图片边长为色块区域边长的整数倍时,临近采样后的结果等同于用左上角元素填充。
证明如下:
原图:
a | b |
c | d |
目标图片(假设):
a | _ | _ | b | _ | _ |
_ | _ | _ | _ | _ | _ |
_ | _ | _ | _ | _ | _ |
c | _ | _ | d | _ | _ |
_ | _ | _ | _ | _ | _ |
_ | _ | _ | _ | _ | _ |
在插值的时候,
y轴同理,因此最终的临近插值结果为:
a | a | a | b | b | b |
a | a | a | b | b | b |
a | a | a | b | b | b |
c | c | c | d | d | d |
c | c | c | d | d | d |
c | c | c | d | d | d |