#1. 圖像下采樣和上采樣的概念#
無論是圖像的上采樣還是下采樣都可以使用matlab中的imresize函數來實現,而這些操作在使用到圖像金字塔的算法中,必然是不可或缺的操作步驟。需要指出的是,當我們對一幅圖像先下采樣再上采樣回原尺寸,得到的結果就是原圖像的低頻成分了。
下面簡要介紹2者的概念。
1.1 圖像下采樣
圖像下采樣(subsampled)可以通俗地理解成縮小圖像,又稱為降采樣(downsampled)。其目的有兩個:1)使得圖像符合顯示區域的大小;2)生成對應圖像的縮略圖。
##1.2 圖像上采樣 ##
圖像上采樣(upsampling)就是放大圖像,也可以將之稱為圖像插值(interpolating),其主要目的是放大原圖,從而使得圖像可以顯示在更高分辨率的顯示設備上。
#2 . 原理#
2.1 下采樣原理
為了說清下采樣,我們舉個例子。假設我們有一幅圖像Img,其大小為M*N,並且我們想對該圖像進行s倍下采樣,即使圖像縮小s倍,這里要在長寬上同時縮小s倍。那么最終得到的下采樣圖像(結果圖像)的大小就為(M/s)×(N/s)。至於究竟如何使得圖像轉為(M/s)×(N/s)大小的,這里提供2種方法。如下:
img = imread('lena.tif'); [height,width,~] =size(img); % 使用2種方法進行下采樣 sub_1 = img(1:2:end,1:2:end) sub_2 = imresize(img,[height/2,width/2],'bilinear');
2.2 上采樣原理
圖像上采樣幾乎都是采用內插值方法,即在原有圖像像素的基礎上在像素點之間采用合適的插值算法插入新的元素。
具體來說,因為圖像上采樣是放大圖像的,那么該過程必然會產生一些像素點,而這些像素點原本是不存在的。這樣就引出了一個問題,這些新的像素點的像素值應該如何確定?內插值算法就是為了計算這些新生像素點的像素值而存在的。
在文獻《圖像插值技術綜述》中簡略的將插值算法分為傳統插值、 基於邊緣的插值和基於區域的插值3類。
接下來就分別簡要敘述一下這3類算法。
2.2.1 傳統插值算法###
最經典的插值方法有最近鄰插值、雙線性插值、雙三次插值,為了克服傳統插值的平滑效應,又出現了基於邊緣的圖像插值算法和基於對象的圖像插值算法。
####最近鄰插值####
最近鄰插值是取采樣點周圍四個相鄰像素點中距離最近的一個鄰點的灰度值作為該點灰度值的方法。最近鄰插值算法速度最快,但會產生明顯鋸齒和馬賽克現象。
####雙線性插值####
雙線性插值利用周圍四個鄰點的灰度值在兩個方向上做線性插值得到采樣點的灰度值。這種方法在很大程度上消除了鋸齒現象,但在邊緣上變得較為模糊
####三線性插值####
雙三次插值不僅考慮四個鄰點灰度值,還考慮各鄰點間的灰度值變化率的影響。是雙線性插值的改進算法。和前兩種經典插值方法相比,可以取得較好的插值效果。但仍具有低通濾波性,會損失插值圖像的高頻部分,因而使圖像邊緣模糊。
2.2.2 基於邊緣的圖像插值算法###
傳統的插值方法雖然方法簡單快速,但由於它們具有低通濾波的作用,往往造成圖像邊緣輪廓模糊。針對傳統方法的優缺點,不同的學者提出了很多基於圖像邊緣的插值方法。這類插值方法的基本觀點是:在非邊緣區域,用傳統的圖像插值方法效果已經很好,且處理速度快、計算量小,因而在非邊緣區域采用傳統的插值方法;而在圖像的邊緣區域,采用特殊的插值方法,以增強邊緣,有效保存了圖像的細節。
2.2.1 基於區域的圖像插值算法###
首先將原始低分辨率圖像分割成不同區域,然后將插值點映射到低分辨率圖像, 判斷其所屬區域, 最后根據插值點的鄰域像素設計不同的插值公式, 計算插值點的值。
原文鏈接:https://blog.csdn.net/Chaolei3/article/details/80225756