图像放大经验与总结——基于MATLAB和FPGA实现(1)

好长时间没来博客了,居然有几位粉丝,真的很愧对我为数不多的几个粉丝,前段时间太懒惰,哎给大家道歉,接下来会常来,请大家监督_,废话不多说,我们直接进入正题。
图像放大
什么是图像放大?图像放大的方式?
1)关于图像放大
图像放大其实属于图像缩放的一种,图像缩放指的是对数字图像的大小调整的过程。图像缩放是一个非平凡(非平滑?)的过程,需要在处理效率和结果的平衡度(smoothnes)和清晰度(sharpness)上做一个平衡组成图像的像素的可见度会变得很高,从而使得图像变得更“软”,相反的缩小一个图像会增加他的平滑度和清晰度。——以上内容来自百度
但是上面这些还是有需要说的,尤其是处理效率和清晰度这个问题,就拿图像放大来说,首先你要确定你的需求,这一步很重要!!比如图像放大范围1~4倍或者1 ~ 10倍? ;性能要求,低噪放大?抗锯齿放大?增强边缘放大?;用什么实现,Matlab?C?FPGA?RAM?;开发周期,1周,1个月?——以上来自小白的工程经验。当需求确定后你就需要确定你所使用的图像放大算法了,不同的算法有不同的效果,看最符合你需求的是哪一种,有时甚至要自己结合多个算法,最终一切都是奔着需求去的,正确审视需求可以让你事半功倍,这个我在下面也会说到一点自己遇到的坑,总之一定要做好前期的规划,胸有成竹,扯远了扯远了,我们回归正题。
2)如何对图像放大
放大图像(或者称为上采样upsampling或者图像插值(interpolation))主要目的是放大原来的图像使其能显示在分辨率更高的设备上。——又来自百度
这里有两个很重要的词,一个是“图像插值”另一个是“分辨率”。图像插值顾名思义就是向图像的原始像素中再加入一些像素,这也是图像放大的基础,图像为什么被放大了?因为向它的像素中插入了一些像素,它的像素变多了,所以图像更“大”了。比如一个分辨率是512480的图像,对它进行插值,再插入512480个像素,那么经过插值后它的像素就变成了1024960个,单从像素上看,这幅图像是被“放大”了。
下面是一副图像经过放大后的效果:
原始图片
放大后的图片
这种放大是显示的分辨率不变,比如这幅原始图像的分辨率是1024
720分辨率,经过放大后,放大后的图片分辨率还是1024720,只是放大后的图片是原来图片中的一部分,这种放大方式是我们常用的放大方式。
还有一种放大方式可以直接改变图像的分辨率,比如将1024
720的图像分辨率直接变成20481440,常用的工具比如window的画图工具更改图片的分辨率(这可是个神器!),还有一个在线图片放大神器!!基于人工智能,放大的图片细节失真更小,应该是基于AI的智能识别然后用对应的模型对放大后的图像进行增强,总之非常牛逼,可以去试一下AL图片放大
但其实本质上这两种图像放大方式是一样的,都是对原始图像进行插值。
如何对图像放大
又回到我们插值的话题,之前我们说了,把一个521
480插值到1024960,单纯的加入512480个像素点,就完成了一个图像的“像素放大”,但是这仅仅是像素上的放大,如果你想达到上面那两幅图的效果甚至更好的效果,那么你插入的这512480个像素点就得讲究讲究了,不能随便插入,必须符合一定的规则,才能保证最后图像的放大效果。
下面我们来聊聊这个插值的讲究,也就是常用的图像放大插值算法:
1)邻域插值算法
将每一个像素原封不动的复制映射到扩展对应的像素中,相当于它的插入像素值就是原始像素值,会产生锯齿现象——来自百度
下面举一个邻域插值算法的例子:
将一个2
2的图像插值为4*4扩大两倍,采用邻域插值算法。
2*2图像
4*4图像
这样的方式最为简单也最容易实现,但是也存在一个比较严重的问题就是采用邻域插值会带来严重的锯齿现象尤其是在高放大倍数的时候。
造成锯齿的原因是因为“相邻像素之间数值变化过剧烈”
首先我们看一下什么是图像中的锯齿:
图像中的锯齿
这张图片是使用“画图”工具放大的,画图工具对图片的放大就是直接进行邻域插值,因为这样可以最大程度保证图像的原始像素,毕竟邻域插值的所有像素点都是原始图像中的像素。
接着我们来讨论产生锯齿的原因是什么
我们继续观察上面这幅有明显锯齿的图片,去看一下它的锯齿都出现在什么地方。有没有新的发现,所有的锯齿都出现在图像中色彩变化强烈的边缘处。这就和邻域插值放大的方式有关了,当放大倍数增加是,也就意味着你在两个相邻像素点之间插入的值变得等多了,如下图所示:
下图哈哈
当相邻两个像素点的值相差比较大时,在颜色上就会有强烈的反差感,也就是说像素的色彩变化太突然了,所以会觉得这两个像素的泾渭分明边界感强烈。
色彩对比图1
就像上图1,像素色彩从白到黑之间没有过渡,所以很容易能分清边界。
但是如果像下面图2这样,边界是不是就不是那么好界定了呢
色彩对比图2
而锯齿就是因为色彩过渡的不够平滑造成的,就像上面图1和图2那样,8个像素点中只有最左边和最右边的一个像素点是原始像素点,中间其他的像素点都是被插值加入的像素点,很显然图一就是采用的邻域插值,而图2采用的是其他的插值方法。
显而易见的是,色彩对比图二中的插值像素和左右两端的原始像素是有区别的,也就是说这些插值像素是原始像素经过计算得到的,那么如何计算这些插值像素呢?这就是下面线性插值算法和双线性插值算法要干的事情了。
未完待续,先去吃个饭,回来继续唠

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章