輕鬆理解圖像縮放算法!最鄰近插值&&雙線性內插值!

2021-01-10 普通科學

寫在最前:用最簡單的方式,講述最深刻的知識。

%%%%%%% %%%%%%% %%%%%%% %%%%%%% %%%%%%% %%%%%%%

圖像的縮放,對於大家來說一定是個非常熟悉的過程了:最簡單直接的,就是雙手按住觸屏手機,手指外滑/內滑,就可以實現了。對於設計方向的小夥伴,通過PS,繪圖,或者任何一中程式語言,都有非常方便的方法可以實現。

那現在不妨想一想,這簡單效果背後,是怎樣的算法思想呢?今天,將以一種非常簡單、直接的方式,為大家描述圖像縮放算法的基本思想。

我們首先需要大概理解一下圖像的概念:有一種圖形格式(位圖),是利用像素點的方式,表述該點的顏色,看下面的圖。4行,七列(阿拉伯數字表示行,漢語數字表示列),一共28位小朋友排成的隊伍,每個小朋友有不同的顏色。這樣的一個簡單的排列,就是我們常見的4px*7px的圖片啦,一共是28個像素點,如果小朋友個數,即像素點個數,足夠多的話,就可以形成各種有意思的圖片了。

pic1. 小朋友像素陣列!

理解了位圖圖片的基本概念之後,現在開始討論縮放的問題。為了使問題簡化,我們考慮更簡單的情況:只有1行小朋友的時候,如下圖所示:

pic2. 單行像素陣列!

我們知道,每個小朋友都是有「寬度」的,即其所佔空間的大小,記為d1(可記為d1=1),則七位小朋友佔總的空間大小:D1=7*d1=7。

圖像縮放,即在佔據相同空間(D1=D2=7)的情況下,用5個(隨便舉的例子)小朋友實現排列,那麼每個小朋友所佔的空間大小就發生了變化:d2=D2/5=1.4。這樣看來,每個小朋友都應該變胖了一些才對,請看下圖:

pic3. 單行縮放!

這樣的效果,即把圖像縮小成原來圖像的5/7,只用5個像素點來表示之前7個點需要表示的數據。

理解這些之後,需要面臨一個非常關鍵的問題了:下面的五位小朋友,應該怎樣對它們進行顏色的選取呢?從上圖我們可以發現,上下兩列隊伍已經對齊,下面這一列的每個小朋友,在橫向上,都處在上面這一列兩個小朋友之間,為了更加明確地表述,見下圖:

pic4. 最臨近關係?

則,下面的小朋友的顏色,應該是上面左右兩個小朋友之間進行選擇!

算法一:最鄰近插值!

顧名思義,和哪個小朋友更接近,就選擇哪一個!即上圖所示內容。可以看到,我們丟失了部分信息,但是整體的顏色,和原圖像是基本相同的!

算法二:雙線性內插值!

這個名稱有點不好理解。我們暫且忽略其稱呼,簡單理解起來,即綜合考慮左右兩邊的情況,按距離的遠近進行綜合取捨。具體情況見下圖所示:

pic5. 左右逢源的選擇!

這樣看來,所得到的新圖形的顏色,和之前的圖形之間,是不是還原度更高呢?並且連算法一中丟失掉的綠色,也部分地保留了下來。

這樣得到的圖形,也會更加地平滑。

這樣,大家應該都明白算法的核心內容了吧?至於怎樣用代碼實現,以及選擇什麼語言更加方便,就見仁見智了!

至於最初28個小朋友,如果行數變成3行,經過變換之後的圖形是怎樣的呢?

用最簡單的方式,講述最深刻的知識結構!

歡迎關注!

相關焦點

  • Android OpenCV(五十一):圖像插值
    圖像插值何為插值?插值是離散函數逼近的重要方法,利用它可通過函數在有限個點處的取值狀況,估算出函數在其他點處的近似值。何為圖像插值?從低解析度圖像生成高解析度圖像的過程(放大),用以恢復圖像中所丟失的信息。
  • 如何在 FPGA 上實現雙線性插值的計算?
    雙線性插值顧名思義是線性插值Pro,為了說明白什麼是雙線性插值,首先得先從線性插值說起。那麼什麼又是線性呢?用數學課本上的話來說,兩個變量之間存在一次方函數關係,就稱它們之間存在線性關係。可能這麼說有些太抽象,下面舉個生活中的例子來形象地說明一下線性插值。如下圖所示,女朋友每周生氣次數和男生的直男程度是線性相關的。已知A男生直男程度為1,女朋友每周生氣次數為4千次。
  • 基於FPGA的四通道視頻縮放引擎的研究及設計
    常見的縮放算法有最近鄰域法、雙線性插值法、拋物線插值法、雙三次插值法和牛頓插值法等基於多項式的插值算法[1],較容易在FPGA硬體上實現;也有B樣條插值法、基於小波插值和有理插值等比較複雜的算法,難以在FPGA上實現。近年來隨著液晶平板顯示器件的廣泛應用,對於定標器的研究越來越多且研究成果也很豐富。
  • 基於FPGA和邊緣預測算法的顏色插值方法
    摘要:一種基於FPGA和邊緣預測算法的顏色插值方法,包括以下步驟:、使用4個FIFO存儲器緩存實時視頻數據,當第5行視頻圖像數據到來時,第5行視頻圖像數據和4個FIFO存儲器中的4行視頻圖像數據形成5×5鄰域模板;將5路數據採用流水線實時分別乘以各模板因數,通過判斷水平和垂直邊緣,選擇非邊緣方向的插值結果作為綠分量的結果;將三行不同的視頻圖像數據再緩存到
  • MATLAB圖像的幾何運算
    它主要是改變圖像中物體(像素)之間的空間關係,可以看成將各像素在圖像內移動的過程。幾何變換通常包括圖像的平移、圖像的鏡像變換、圖像的轉置、圖像的縮放和圖像的旋轉等。8.2.1  圖像的平移圖像平移就是將圖像中所有的點都按照指定的平移量水平、垂直移動。
  • 一種FFT插值正弦波快速頻率估計算法
    顯然僅僅利用FFT幅度最大值估計信號頻率難以滿足精度要求,因此各種插值算法應運而生。文獻給出了Rife算法,在對輸入信號進行一次FFT運算後,利用最大譜線及其相鄰的一根次大譜線進行插值來確定真實頻率位置。當信號的真實頻率處於兩相鄰量化頻率之間的中心區域時,Rife算法精度很高,但是在FFT量化頻率附近的誤差卻較大。
  • 當隨機採樣遇見插值,微軟亞研提出節省推理計算量的新範式
    為了解決這一問題,研究者提出了一系列相關算法,如模型剪枝(Model Pruning)、模型量化(Model Quantization)、提前終止(Early Stopping)和利用特徵響應稀疏性(Activation Sparsity)等方法。
  • CLAHE算法實現圖像增強「AI工程論」
    pipline,其中的流程是:RandomBrightnessContrast就是隨機選擇圖片的對比度和亮度CLAHE是一種對比度受限情況下的自適應直方圖均衡化算法ShiftScaleRotate這個就是平移縮放旋轉三合一,給力!
  • 拉格朗日插值定理的理論基礎
    只要做數據處理,不可避免的工作就是插值。而插值裡面比較常用的方法之一就是拉格朗日插值法,這篇文章就跟大家講講拉格朗日插值的理論基礎。為什麼需要進行插值我們進行數據處理的理想,當然是希望數據非常的完備,啥玩意兒都有。但現實往往不盡如人意,數據經常會缺東少西的,那怎麼辦呢?我們需要對一些不存在的數據進行一些插補。
  • 結合實例與代碼談數字圖像處理都研究什麼?
    下面給出的12個大的方向,系我認為可以看成是基礎性領域的部分,而且它們之間還互有交叉本文引用地址:http://www.eepw.com.cn/article/201702/344134.htm  1、圖像的灰度調節  圖像的灰度直方圖、線性變換、非線性變換(包括對數變換、冪次變換、指數變換等)、灰度拉伸、灰度均衡、直方圖規定化等等)。
  • 一個簡單的例子學明白用Python插值
    這篇文章嘗試通過一個簡單的例子來為讀者講明白怎樣使用Python實現數據插值。總共分3部分來介紹:為什麼需要做插值這種事?通過拉格朗日插值法來看看插值這個事的理論要怎麼理解?Python實現拉格朗日插值的一個例子。為什麼需要做插值這種事?
  • 一種不同於雙線性插值的上採樣方法
    Introduction 在之前的語義分割方法中,雙線性插值通常作為其最後一步來還原特徵圖的解析度,由於非線性差值不能建立起每個像素的預測之間的關係,因此為了得到精細的結果,對特徵圖的解析度要求較高,同時帶來了巨額的計算量。
  • Python 腳本案例:為流域插值雨量計
    我們不僅更新完善了諸多功能,最重要的是加入了Python 腳本。什麼是Python?Python是一種解釋型腳本語言。作為全球公認的「膠水語言」,擁有強大的第三方庫,可以將其他語言製作的各種模塊輕鬆連接到一起。Python自誕生之日起,便有類、函數、異常處理,並且可以調用很多C語言庫文件。隨著人工智慧大數據的快速發展,Python一路綠燈,備受關注。
  • 3D圖形晶片及3D圖像生成算法的原理分析
    用多邊形表示物體有兩個優點:首先是直接(儘管繁瑣),多邊形表示的物體其表面的分段線性特徵除輪廓外可以通過明暗處理(shading)技術消除;其次是僅存儲多邊形頂點的幾何信息,多邊形內部每個象素的明暗顏色計算所需的信息由這些頂點信息插值而來,這正是易於用圖形硬體支持的快速明暗處理技術。
  • 用於CDR電路的相位插值選擇電路設計
    為了滿足採樣要求,參考時鐘相位的最小數目是2,文獻[1]認為數目為4是因為每個時鐘信號在差分完成方式下都自動產生了各自的互補信號,所以這裡將參考時鐘相位的最小數目定為2。這兩個時鐘的相位相鄰,且呈正交關係,儘管可以採用更多的時鐘相位來降低噪聲靈敏度,但正交時鐘產生相對簡便,而且對於數據的抖動性能要求低,同時也可以降低時鐘分布網絡的複雜度以及功耗和面積。
  • 空間插值方法總結及其在環境研究中的應用
    空間插值用法示例圖左邊這張圖是區位於湖北省恩施市東北邊陲的一個土壤重金屬研究區,面積約50平方千米,圖中的黑色小點代表了採樣點,在研究區域內,基本上每0.25平方千米就有一個採樣點,整個研究區域共有大約200個採樣點。
  • 1.4 線性函數的基本屬性 1.5 複合映射與複合函數
    內容提要:線性函數的變化率、複合映射、複合函數及其複合條件、分段函數的複合方法與舉例.
  • 輕鬆理解泰勒展開
    【輕鬆一刻泰勒公式居然能救命!!】
  • 每日一練 · 插值法
    【答案及解析】一、係數已知時【答案】根據插值法得出,(i-3%)/(4%-3%)=(3.7-3.7171)/(3.6299-3.7171)得出i=3.2%這是病得治,考試就考這種計算,現在不算,到考場哭嘛~~~~②答題時,所有你的計算過程全部在草稿紙搞定,只需寫上:根據插值法得出該公式,然後將計算結果寫出來就ok了。③書寫公式時候注意,除法可以用「/」表示,但是前後的減法請用(  )給括起來。等號左邊是要先算減法,再算除法。
  • 財管學習中繞不開的插值法,到底怎麼用?
    經常看到有小夥伴在論壇問,什麼是插值法?怎麼運用插值法計算折現率?求細節、詳細解答!今天的帖子,豆哥用計算到期收益率的題來舉例插值法該如何使用。插值法還不明白的小夥伴,速速get啦!但在債券價格和面值不相等的時候,需要用插值法計算到期收益率。2、債券的價格>面值,即溢價購買:  例題:ABC公司20×1年2月1日用溢價購買一張面額為1000元的債券,買價1105元,其票面利率為8%,每年2月1日計算並支付一次利息,並於5年後的1月31日到期。