圖像放大經驗與總結——基於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採用的是其他的插值方法。
顯而易見的是,色彩對比圖二中的插值像素和左右兩端的原始像素是有區別的,也就是說這些插值像素是原始像素經過計算得到的,那麼如何計算這些插值像素呢?這就是下面線性插值算法和雙線性插值算法要乾的事情了。
未完待續,先去喫個飯,回來繼續嘮

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