由於數字圖像可以被看作為一個矩陣,因此可以用MATLAB來進行圖像處理。本章簡單介紹了幾個常用到的圖像處理函數。
1.讀取影像 imread()
clear all;clc;img1=imread('xyy.png');以讀取一張名為「xxy.png」的喜羊羊圖片為例,可以看到MATLAB在將圖像讀取後以矩陣的形式進行了存儲。
2.顯示圖像 imshow()
clear all;clc;img1=imread('xyy.png');imshow(img1);結果為圖像在一個figure中顯示。
3.影像灰度直方圖 imhist()
clear all;clc;img1=imread('jinx.jpg');subplot(1,2,1);imshow(img1);subplot(1,2,2);imhist(img1);使用「jinx.jpg」做演示,代碼中的subplot()為在figure中各個分塊位置創建坐標區。如(1,2,1)就是1*2這兩個分塊中的第一個。
結果如下:
4.直方圖均衡化 histeq()
直方圖均衡化(histogram equalization)是使變換後圖像灰度值的概率密度為均勻分布的映射變換方法、通過直方圖均衡化處理,圖像對比圖得到了提高。
計算公式為:頻率映射=映射後的灰度級*原圖像的累積頻數/原圖像的像素數=映射後的灰度級*原圖像的頻率
clear all;clc;img1=imread('jinx.jpg');subplot(2,2,1);imshow(img1);subplot(2,2,2);imhist(img1);img2=histeq(img1);subplot(2,2,3);imshow(img2);subplot(2,2,4);imhist(img2);結果如下:
5.空間濾波 imfilter()
使用卷積運算對圖像進行濾波。
例子中使用拉普拉斯算子對喜羊羊圖片進行濾波操作,代碼如下(前面的直方圖均衡忘刪了,請不要介意):
clear all;clc;img1=imread('xyy.png');subplot(2,2,1);imshow(img1);subplot(2,2,2);imhist(img1);img2=histeq(img1);lapl=[0 1 0;1 -4 1;0 1 0];img2=imfilter(img1,lapl);subplot(2,2,3);imshow(img2);subplot(2,2,4);imhist(img2);結果如圖:
6.二值化分割閾值(threshold)函數 graythresh()
此函數使用最大類間方差法求得閾值,代碼如下:
clear all;clc;img1=imread('xyy.png');subplot(1,2,1);imshow(img1);level=graythresh(img1);subplot(1,2,2);imhist(img1);此時的閾值為:0.6118,該數值為歸一化後的值,範圍是0~1。
7.影像轉二值圖 im2bw()
一般使用上述的閾值即可實現該操作,代碼如下:
clear all;clc;img1=imread('xyy.png');subplot(1,2,1);imshow(img1);level=graythresh(img1);img2=im2bw(img1,level);subplot(1,2,2);imshow(img2);效果如下圖:
8.開運算 imopen()
使用同一個結構元素對圖像先腐蝕後膨脹的運算稱為開運算(open),又稱開啟。它具有消除圖像中小於結構元素的細小目標、在纖細點處分離目標、平滑較大目標的邊界而且不明顯改變其面積的作用。
代碼如下:
clear all;clc;img1=imread('jinx.jpg');subplot(1,2,1);imshow(img1);img2=imopen(img1,strel('disk',5));img3=imsubtract(img1,img2);subplot(1,2,2);imshow(img3);我們可以用它來提取背景,再使用imsubtract()函數減去此背景圖像。(例子中的圖片不太明顯...)
更多內容大家可以前往MATLAB官方幫助文檔查看。
參考文獻:
https://ww2.mathworks.cn/support.html韋玉春,湯國安,汪閩,楊昕等《遙感數字圖像處理教程》(第三版)