[00]數字影像處理-matlab速成

原本聽的是mooc武漢大學的數字影像處理課程,但是無奈老師讀ppt的能力太強,不太適應,後面的課程對於實驗方面的要求甚低,無奈之下到處找課程,終於找到了一個適合自己的教程《王偉強-數字影像處理》,今天開始連載,希望3.20日之前能夠完成課程的學習,加油!

預計連載的目錄

  1. 導言與MATLAB快速介紹
  2. 空域處理(I) – 亮度變換(I)
  3. 空域處理(II)- 卷積與線性移動不變系統
  4. 頻域處理(I)- 傅立葉變換
  5. 頻域處理(II)- 高低頻濾波器與頻域處理框架
  6. 影像復原(I)- 雜訊與相關的去噪技術
  7. 影像復原(II)- 降質函數與約束最小二乘恢復方法
  8. 彩色影像處理
  9. 小波變換與影像處理(I)- 小波的相關理論
  10. 小波變換與影像處理(II)- 尺度函數、小波函數、快速小波變換

基本概念

數字影像處理DigitalImageProcessing,DIP
岡薩雷斯將數字影像處理看成一個黑箱,輸入一個圖片,輸出也是一個圖片
影像分析就是輸出屬性
視覺就是輸出理解

matlab:配置環境當前目錄和搜索路徑

添加或修改搜索路徑,右擊桌面圖標屬性修改設置起始位置

matlab:.m文件

matlab分為兩種文件,一種是腳本文件,類似於dos系統中的批處理文件,特點就是所有變數都是全局變數,運行完之後的變數不會從系統中清除。另外一種函數文件,外部看是看不出來的,特點就是函數變數除了特殊聲明都是局部變數。

數字影像的表示


也就是說,影像的矩陣存儲形式是從0,0位置開始,而matlab中影像的矩陣存儲形式是1,1開始。

讀取一幅影像

使用Matlab ipt讀取一幅影像,ipt就是影像處理工具箱。

f=imread('bird.jpg');
  • imread從當前目錄讀取文件,如果失敗,它將嘗試在搜索路徑中找到該文件
  • 請注意分號;,如果不加分號,命令窗口將顯示影像的矩陣值。
  • matlab中的字元串是單引號。

獲取影像的資訊

顯示或寫入影像

  • imshow(f)
  • imshow(f,G)
  • imshow(f,[low,high])
  • imshow(f,[])
  • imwrite(f,’filename’)
  • imwrite(f,’filename’,’ext’)
  • imwrite(f,’filename’,’quality’,q)
    品質指標q的範圍是0-100,值越低,影像品質越差,壓縮率越高。

影像類型

  1. 強度影像/灰度影像
  • 灰度影像是一個數據矩陣,它的值被縮放以表示強度。
  • 當灰度影像的像素是uint8或uint16類型時,它們的取值是
    [0,255]或[0,65535]範圍內的整數。
  • 如果影像是double類型的,則像素值為浮點數。按照慣例,經
    過縮放之後double類型的灰度影像的像素值落在[0,1]範圍內
  1. 二值影像
  • 二值影像是由0和1組成的邏輯陣列。
  • 數值陣列使用邏輯函數轉換為二進位。
  • 如果A包含0和1以外的元素,則使用邏輯函數將所有非零數值轉換為邏輯真(1),並將所有值為0的項轉換為邏輯假(0)
  1. 索引影像
    BMP影像標識其為索引影像
  • 影像可以是索引影像的,也可以是真顏色影像。
  • 索引影像將顏色作為索引數組存儲到colormap圖中。
    數據號代表著調色板的索引號,從下往上存儲。對於數據量大的影像節省空間
  1. RGB影像
    是目前見到的最多的影像,又叫真彩影像。
  • 真彩色影像不使用colormap;相反,每個像素的顏色值直接存儲為RGB三元組。colormap也就是調色板
  • 在MATLAB中,真彩色影像對象的CData屬性是一個三維(m×n×3)數組。這個數組由三個m×n矩陣組成,它們沿著第三維連接在一起。

數據類型

C語言中主要是int,double。matlab中int分的很細,u代表不帶符號的,uint代表usigned,非負數。

數據類型和影像類型之間轉換

讀入一個圖片通常是整型,直接進行傅里葉變換是錯誤的,因此需要轉換為double型。

  • 通常我們將影像稱為(數據 – 影像類型)的影像
    例如「uint8強度影像」僅指代像素值是uint8類型的強度影像
  • 數據類之間轉換簡單,語法為
B = data class name(A)

其中數據類名是數據類表第一列中的名稱之一。例如A是一個uint8類型的數組,精度更高的double類型數組B是由命令B = double(A)生成的。這種轉換在整本書中很常見,因為matlab希望數值計算中的操作數是雙精度浮點數。

數據轉換超過255直接截斷過於粗暴,因此ipt中通常採用伸縮的方式


如何分析?im2uint8,所有超過[0,1],以外的數都會進行區分。將<0的-0.5設置為0,>1的1.5設置為1,整體乘以255



所有<0設置0,所有>255設置為1,(128-(-12))/(300+12)=0.4487

索引

w=v ‘ ,代表共軛轉置。

A = magic(5),每一行每一列每一個對角線的和都拉丁方5,和為65.
sum(A)是一個行向量,sum(A(😃)是一個數
mean(A)每一科的平均數,mean(A(😃)所有科的平均數






把c語言的 !換成了 ~


  • MATLAB 語言專門針對矩陣運算進行了優化。儘可能地利用這一優勢可以極大地加快計算速度。
    • 循環向量化
    • 數組預分配