日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB数字图像处理详细总结

發布時間:2024/8/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB数字图像处理详细总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

給一個算法如何寫程序https://blog.csdn.net/baidu_38205880/article/details/80241655先在網上找一些參考再寫

算法的一般步驟自頂向下,考慮輸入輸出,有點像信號中的響應的思想,還要考慮數據結構,特殊輸入,增加程序的健壯性,

下面是數字圖像處理matlb方面的知識,看例子是很快理解知識點的一種方案,具體都要實現什么功能,可以做分解,然后每一步都用流程圖實現,最后編寫代碼

使用說明

本文參照的圖書MATLAB圖像處理實例詳解,鏈接地址:https://pan.baidu.com/s/1uUBqJNdWpzTZ21xLZnFMRg
提取碼:3hpc,本文是做圖像處理很好輔助博文,具體使用方法是先用ctrl+F來搜索需要處理的函數名稱,找到之后再MATLAB中輸入函數按F1鍵獲得函數幫助,就可以使用函數了。

目錄

前言

使用說明

一,MATLAB基礎

1.1矩陣的算術運算

1.2判斷循環

1.3MATLAB繪圖

1.3.1二維圖形繪制

二,MATLAB圖像處理基礎

2.1圖像類型的轉換

2.2文件信息的讀取保存

三,數字圖像的點運算

3.1圖像點運算

3.2圖像的領域操作

四,圖像增強

4.1空域濾波

4.2頻域濾波

五,圖像復原技術

5.1空域濾波復原

5.2圖像復原

六,圖像分割

六,圖像變換技術

七,彩色圖像坐標變換

八,圖像壓縮編碼

九,圖像特征分析

十,圖像形狀特征

10.1形狀特征描述

10.2形態學數字圖像處理

十一,小波變換

十二,Simulink數字圖像處理


一,MATLAB基礎

按下Tab命令可以出現提示,

二進制圖像函數,im2bw();單精度表示式single,雙精度是double,查看變量的字節空間大小whos命令,注意普通數組[],細胞數組{},函數句柄是一個可調用的MATLAB函數的關聯,通過句柄可以調用任意函數用@fhandle創建句柄>> fhandle=@sin,>> y1=fhandle(2*pi),y3=sin(2*pi);利用struct()函數創建結構體

>> student=struct('name',{'liming','nnn'},'number',{'2012','200'}),也可以stu(2).name='mm';
stu(2).number='11'來建立結構體

細胞數字作為MATLAB特有的一種數據類型,組成它的元素是細胞,細胞用來存儲不同類型數據單元,細胞數組的建立可以用直接賦值法和cell()函數,語句后面有冒號就是先不執行,沒有冒號就是直接執行cellplot(student)顯示細胞數組的結構,

1.1矩陣的算術運算

對角矩陣eye(3),魔方矩陣magic(3),點乘.*,乘*,矩陣比較大小本質上也是一個一個的比返回的結構也是矩陣,就是對應元素是0,表示假,1表示真

>> A=[1 2 3;2 5 6];
>> B=[2 2 3;27 8 8];
>> cl=A<B

cl =

? 2×3 logical 數組

? ?1 ? 0 ? 0
? ?1 ? 1 ? 1

邏輯運算異或xor(A,B)需要維數相同,運算符的優先級,括號運算最高,非運算的優先級也比較高,點乘高于乘,邏輯的其它運算優先級最低

矩陣:創建一個行矩陣可以有逗號或者空格來分隔每一個元素,行與行之間是用“;”,行列之間是用逗號,創建多行矩陣,行與行之間用分號來分隔,常用的特殊矩陣函數比如ones(n),n是維度,見書的49頁

>> a=[1 2 3];
>> b=[1,2,3]

矩陣的操作[A B]表示矩陣橫向合并,[A;B]表示縱向合并,用([x],[y]);來表示提取矩陣([1 3],[2 3]),冒號在提取這部分的作用

[1:3]表示1到3,[:]表示省略,不提取,det()求矩陣行列式的值,transpose()求轉置矩陣,求逆矩陣inv(),滿秩的方陣才有逆矩陣,在MATLAB中非滿秩的方陣也可以求逆矩陣,叫偽逆矩陣pinv(),求矩陣的秩可以用rank()函數,秩就是矩陣中非零元素階次的最大值,ans是默認的一個變量;

MATLAB控制語句for,while,if,for 變量=初始:增量:終值,增量省略是默認是1,比如for a=1:6,每一層for循環都以for開始end結束,給矩陣賦值要現有矩陣,比如可以用特殊的值創建矩陣,之后在改變,和我們之前c的不同if在于沒有括號,需要加end結束循環,while(循環條件)? ?end

>> clear
>> for a=1:5
x=a+a;
end
>>?

1.2判斷循環

選擇結構if,swich,try,選擇結構的作用是根據指點的條件是否可以滿足,決定程序的流向,向if,try,for這樣的關鍵字后都不用加";"

if 表達式

語句1;

else

語句二;

end

swich 表達式

case? 表達式1

語句1

case 表達式2

語句2

otherwise

語句3

end

try是一個錯誤捕捉語句,程序先執行語句一沒有錯誤就跳出try,有錯誤就執行語句二,

try?

語句1

catch

語句2

end

A=imread('D:\logi\IMG20160402201058','jpg');
catch
A=imread('D:\logi\IMG20160402201059','jpg');
end
>> imshow(A)

影響程序流程走向的程序,稱為流程控制語句,break,continue,return,break是終止的是循環體,而continue結束的是一次循環,break可以跳出本次循環,執行語句end的下一條語句,continue語句可以結束本次循環,跳過其后的循環,執行下一次循環,pause語句:其調用格式為pause,則暫停程序運行,按任意鍵繼續,還有一種調用格式為pause(n),就是程序暫停n秒后執行,調用格式為pause on /off,就是允許或禁止之后的程序執行,

M文件就是 編寫函數的,編寫好之后可以在命令窗口調用函數,M文件就是一系列命令的集合,M文件分為腳本文件和函數文件腳本文件不接受參數輸入,也不返回輸出參數,文件執行過程中產生的所有變量都存儲在工作空間中,函數文件可以接受參數輸入,也有返回值,程序執行完局部變量就會釋放不會存儲在工作空間中,從新建的地方建立腳本或函數文件,只有輸入參數和輸出參數會存儲在工作空間,而腳本文件只要m文件中變量在工作空間中都可以查到。

M文件的調試,在有疑問的地方添加變量輸出就,查看是否有錯,還可以查詢工作空間中的變量,可以利用工具的Debug,在matlab中用%號來表示注釋,腳本文件的每一行結尾都要有“;”,

function y%輸出參數%=average%函數名%(x%輸入參數%)
y=sum(x)/length(x);
end

1.3MATLAB繪圖

MATLAB繪圖步驟:

1)數據準備 確定變量的函數關系及取值范圍,明確橫坐標變量和縱坐標變量,計算出變量數據,

2)設置圖形窗口位置在指定的位置創建新的繪圖窗口,缺省是打開figureN01

3)繪制圖形,生產圖形文件:創建坐標軸,調用繪圖函數,設置圖形中線型,色彩,數據點形等屬性

4)圖形的修飾:為了突出圖形顯示結果,可對生成的圖形文件做進一步調整如設置坐標軸的范圍和刻度,圖形注釋(圖名,坐標名文字說明等

5)保存和導出圖形,按指定文件格式保存圖形導出圖形,以方便后續使用

1.3.1二維圖形繪制

使用函數plot(),用subplot()來分割函數,圖形的修飾可以在plot()函數中加參數,具體可以參考68頁,plot(x,y,‘b’),t圖形的坐標軸限制函數anxis([xmin xmax ymin ymax]),對橫軸坐標的標注xlable('string'),標題使用title(‘string’)利用gtext('sting')來用鼠標給函數曲線命名,也就是說用gtext('string'),產生文字用鼠標拖拽在曲線上,用grid函數給圖像加柵格

>> clear
>> x=0:0.02:2*pi;
>> y=sin(x);
>> plot(x,y);
>> plot(x,y,'b')
>> plot(x,y,'g')
>> gtext('sinx')
>> grid
1.3.2直方圖繪制

使用函數hist(y,n)將Y的值等分為n段,平均的分在x軸上,然后統計每一段出現的頻率,柱狀圖用bar(x,y)來畫,

matlab中有幾種獲取幫助的途徑

第一種,也是最有效的就是選中函數名,按F1直接查看該函數的幫助文檔;

?第二種,就是通過命令窗口中(help 函數名)來獲取該函數的幫助文檔;

?第三種,就是通過工具欄中的幫助菜單來輸入函數名,獲取該函數的幫助文檔;

?第四種,就是去matlab官網MathWorks查找函數的幫助文檔

取值是通過函數來實現,具體可以看28頁,在matlab中A既可以是變量,也可以是矩陣,一般習慣用小寫表示變量,大寫表示矩陣,

二,MATLAB圖像處理基礎

1)主要介紹matlab圖像處理工具箱可以從help--圖形處理工具箱,還可以從左下角start打開;

2.1圖像類型的轉換

圖像類型的轉換,可以用對應的函數來完成,圖像的轉換如下圖3.11所示RGB轉為灰度函數RGB2gray(),其他函數可以參照P80頁灰度圖像轉為索引圖像,灰度圖像是一個二維數組矩陣,而索引圖像不僅包括一個二維的數組矩陣,還包括一個Mx3的顏色映射表,所以要將灰度圖像轉換為索引圖像,則必須生產對應的顏色映射表,調用函數格式為[x,map]=gray2ind(I,n)就是將灰度圖像I轉為索引圖像,n是灰度級數默認64,[x,map]對應轉換后的索引圖像,map中對應的顏色值為顏色圖gray(n)中的顏色值,索引圖像中有顏色,飽和度,亮度信息,灰度圖像只保留了亮度信息,將索引圖像轉為RGB圖像,[x,map]指向索引圖像,將RGB指向轉換過程中形成一份三維數組,然后將索引圖像的顏色映射表中的顏色值賦值給三維數組,,二值圖像的轉換,如果圖像轉換前不是灰度圖像,要先轉為灰度圖像,然后再通過閾值法把灰度圖像轉化為二值圖像;一個數據矩陣就相當于一幅數字圖像,只是在數字圖像中對應的數組元素必須在一定的取值范圍內可以調用mat2gray()進行轉化,格式為I=mat2gray(X,[xmin,xmax]),xmin對應灰度值0,即黑色,xmax對應灰度值為1,即白色,具體可看P84,索引圖像和RGB圖像的構成比較類似,索引圖像是一個數組和一個映射表先找到數組中的值,數組中的值對應一個map值,map值中有顏色信息,而RGB是三個分量的顏色合成色彩信息

?
>> map=colorcube(128);%指定顏色的數目
>> x=rgb2ind(RGB,map);

>> imshow(x,map)%顯示索引圖像的

2.2文件信息的讀取保存

文件信息的讀取,用imfinfo()來讀取文件信息,調用格式為INFO=imfinfo('filename','fmt'),或INFO=imfinfo('filename.fmt')filename是文件名,fmt是文件類型名;圖像文件的讀取用imread(),彩色圖像和灰度圖像調用格式為I=imread('filename','fmt')或I=imread('filename.fmt'),索引圖像[X,map]=imread('filename','fmt'),還有網絡圖片的讀取,具體參照p93;特殊文件格式的讀寫,比如GIF[...]=imread(...,'frames',idx),idx是圖像的編號,

>> [I,map]=imread('D:\logi\GIF1.gif',2);
>> imshow(I,map)

圖像文件的保存,用函數imwrite(),大體使用方法和imread()類似,調用格式為imwrite(I,'filename','fmt'),索引圖像的保存為imwrite(X,map,filename','fmt')

圖像文件的顯示imtool()工具箱圖像瀏覽器或imshow()通用的常用的;像素信息的顯示函數impixel()可以返回選中像素或像素集數據,可以直接將像素坐標作為該函數的輸入參數;函數impixelinfo(),>> pixels1=impixel(I)用鼠標選定圖像上的點然后顯示該點的值,選完之后按Enter結束,impixel()還可以用來顯示特定的像素值不用鼠標impixel(I,100,400),100,400分別為橫縱坐標;函數impixelinfo()就是用這個函數寫完之后顯示了圖像,你就可以在上面用鼠標點,點了之后就會執行在圖像的上方或者下方直接顯示該點的像素值

視頻文件的讀取,主要函數有aviinfo()和函數aviread()來讀取視頻文件信息及視頻流,新出現的讀取函數有mfileinfo(),mmreader()和函數read();視頻文件的播放用函數movie(),movie(M),播放M一次,M是一個結構體包含cData和Colormap,movie(M,N)就是播放視頻M,N次,movie(M,N,FPS),FPS是幀速率,默認是12幀/秒

三,數字圖像的點運算

3.1圖像點運算

圖像點運算,點運算又稱對比度增強,對比度拉伸或灰度變換,是對通過圖像中一個像素值,進行運算的圖像處理方式B(x,y)=f(A(x,y)),J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)

將圖像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J關系的曲線形狀。如果gamma小于1,此映射偏重更高數值(明亮)輸出,如果gamma大于1,此映射偏重更低數值(灰暗)輸出,如果省略此參數,默認為(線性映射)。? [M,N]=size(J); ? ? ? ? ?%獲得灰度圖像數據J的行列數M,N,用imadjust()直接就對RGB圖像進行操作,而利用分段線性處理和對數函數處理,都要先把RGB圖像轉為灰度圖像,分段的時候是對坐標分段,也可以根據灰度值進行分段 圖像的空間變換,在MATLAB中圖像處理工具箱提供一個專門的函數intransform(),用戶可以定義參數實現多種類型的空間變換,包括放射變換(如平移,縮放,旋轉,剪切),還有醫學上常用的投影變換,B=imtransform(A,TFORM),TFORM是函數maketform()返回的一個結構體,調用格式如下圖一,custom可以實現投影變換和放射變換,放射性變換中原圖像中某個像素點坐標(x,y)和變換后該像素點坐標(x',y'),關系如下圖二,其實這種變換就是矩陣中的坐標變換,變換前的坐標乘上一個矩陣得到變換后的坐標(x',y') 圖一? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖二? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖三 主要步驟就是生產結構體,調用結構體imtransform(),需要maketform()函數的配合,size(1,2)可以得到函數的列數,技術數組的大小,xData,YData就是對X,Y的數據范圍進行限制,size(I,2)表示取出I中列數,size(I,1)取出I中的行數,fillvalue是對矩陣的填充 >> Ia=maketform('affine',[cosd(30) -sind(30) 0;sind(30) cosd(30) 0;0 0 1]);
>> Ib=imtransform(I,Ia); 平移后的溢出J=ones(M,N,G); 就是不考慮,J=ones(M+abs(a),N+abs(b),G); ?%初始化新圖像矩陣全為1,大小根據考慮x軸和y軸的平移范圍,也就是說平移后的圖形如果不對矩陣進行擴大,圖像是不能完全顯示的

3.2圖像的領域操作

圖像的領域操作,在MATLAB中提供了幾個實現領域操作的函數,用戶可以直接調用這些函數,實現各種操作,通用滑動領域操作函數nlfiler(),列方向領域操作函數colfilt(),分離領域操作函數blockproc(),@符號主要使用于匿名函數,充當函數句柄,如下圖所示:比如沒有In函數但是有log函數我們可以使用ln=@(x)log(x)就可以調用log了有點像給函數重新命名,X是參數,blockproc()就是 把函數 分為一小塊一小塊的,調用格式為blockproc(A,[M,N],fun),加入fun這個句柄就是說在分離的同時可以再做旋轉等,

圖像的區域選取,可以找到我們感興趣的區域進行相關操作,MATLAB也提供了一些圖像區域選擇和操作函數,如多邊形區域選擇函數roipoly(),是基于區域,roipoly(I,c,r)坐標選擇灰度ROI區域選擇函數roicolor(),roicolor(I,low,high);根據灰度的范圍進行選取,區域填充函數roifill(),就是選擇出來的區域,涂上一種顏色,區域濾波函數roifilt2(),介紹一個掩模的概念:就是用一個有洞的紙張擋住圖像所看到的部分,h = fspecial(type),是濾波函數

四,圖像增強

圖像增強空間域也叫對比度增強,灰度增強只改變像素點的灰度值,并逐點進行,和周圍的其他像素點無關,為了進行灰度變化首先要獲得灰度直方圖在MATLAB中可以使用imhist(I)函數來獲得,彩色圖像也可以做直方圖,只不過是對三個分量RGB分別做灰度直方圖,直方圖均衡化用的是histeq(I),直方圖均衡化使得圖像的色彩分布更加的均勻,不會出現過明或者是過暗的情況,圖像的標準差,可以采用std2()計算矩陣的標準差,std()計算向量的標準差,標準差越大,圖像的對比度越大,mean()平均值函數,中值濾波函數medfilt2(I),計算兩幅大小相同的圖像的相關系數用,corr2(I,J);灰度圖像的等高線就是灰度相同的點連接成的,利用imcontour(I,n),n是繪制的等高線的數量,

4.1空域濾波

空域濾波:線性平均濾波是一種最常用的線性空域濾波,圖像的邊緣屬于高頻成分,常用的模板有3x3的,K=imfilter(J, h),表示J卷積H的意思,可以用這個函數或者conv2(J,H)也可以,加噪聲的函數imnoise(I, 'salt & pepper', 0.02);順序統計濾波函數ordfilt2(I, 1, true(5));就是有點像領域濾波的感覺就是用領域內的第一個像素代替目標像素,true(5)表示用5*5的模板,維納自適應濾波函數是wiener2(J, [5 5]);

4.2頻域濾波

頻域濾波圖像增強首先是通過傅里葉變換將圖像從空間域變換到頻率域,然后反變換回去,頻域內的圖像增強有低通濾波,高通濾波和同態濾波;低通去除噪聲,但是也會使得邊緣模糊,matlab里面的字母是分大小寫的,Y = fftshift(X);平移零頻分量,然后繪制以零為中心的功率,也就是零點跑到中間去了,Y = fft2(X,m,n) 將截斷 X 或用尾隨零填充 X,以便在計算變換之前形成 m×n 矩陣。Y 是 m×n 矩陣。如果 X 是一個多維數組,fft2 將根據 m 和 n 決定 X 的前兩個維度的形狀;[X,Y] =?meshgrid(x,y):輸出X的每一行的數值都是復制的x的值;輸出Y的每一列的數值都是復制的y的值,meshgrid就是產生這樣兩個矩陣,時域卷積頻域乘積K=J.*H;,c=b(1:size(b,1),1:size(b,2))表示取出b的這些行和列上的元素,賦值給c,最后一個值不超過size(b,1)的一個向量,size(b,1)是b矩陣的行數,表示求距離函數D=sqrt(U.^2+V.^2);濾波器的類型分為巴特沃斯濾波器和高斯濾波器,帶阻濾波器是用來抑制距離頻率中心一定距離的一個圓形區域的頻率,可以用來消除一定頻率范圍內的噪聲,同態濾波是一種特殊的濾波技術,可用于壓縮圖像動態范圍,且增強對比度,濾波窗口越大圖像邊緣越模糊,圖像去燥效果越好

五,圖像復原技術

5.1空域濾波復原

圖像復原技術,可以通過imnoise()給圖像添加噪聲,調用格式為imnoise(I,type,parameters),parameters不同噪聲的參數不同,如果是椒鹽噪聲則表示,椒鹽噪聲的密度大小,高斯噪聲則表示均值和方差,空域濾波方法,首先是均值濾波包括算術均值濾波和幾何均值濾波,順序統計濾波包括中值濾波,中值濾波能夠很好的保留圖像的邊緣,非常適合去除椒鹽噪聲,效果優于均值濾波,順序統計濾波還包括最大值,最小值濾波,最大值濾波能夠去除椒鹽噪聲,但是會從黑色物體的邊緣去除一些黑色像素,最小值濾波類似,會從白色物體的邊緣去除一些白色像素,J=medfilt2(I, [m, n]);二維中值濾波,采用的窗口大小是mxn的,B=ordfilt2(A,order,domain),domain=[0 1 1 0; 1 1 1 1; 1 1 1 1; 0 1 1 0];J=ordfilt2(I, 6, domain);domain是一個模板,order是去除domain中的第6個像素值作為該點像素值;自適應濾波wiener2()可以根據圖像中的噪聲進行濾波,還可以對噪聲進行估計,該函數根據圖像的局部方差來調整濾波器的輸出,調用格式為J=wiener2(i,[m,n],noise),采用的窗口為mxn,如果不指定窗口大小,默認是3x3的,輸入噪聲noise為噪聲的能量,返還的是圖像J,K=imcrop(I, [100, 100, 1024, 1024])是裁剪圖像的函數,意思就是從(100,100)的起始坐標開始,裁剪出1024x1024的圖像,[K, noise]=wiener2(J, [5, 5]);采用維納自適應濾波,返回圖像K和圖像的噪聲估計。

5.2圖像復原

圖像復原:1,逆濾波復原,通過傅里葉變換實現,最后用傅里葉反變換,2,自適應濾波優點是復原效果好,計算量較低,PSF=fspecial('motion', LEN, THETA);該函數就是產生濾波模板的,比如產生拉普拉斯算子模板,K=deconvwnr(J, PSF, NSR);這是維納自適應濾波函數,NSR是信噪比3,約束最小二乘法復原,采用函數deconcreg()進行圖像的約束最小二乘法復原,調用格式是J=deconvreg(I,PSF),lucy復原,K=deconvlucy(J, PSF, 5);5是迭代次數,迭代次數越多,復原效果越好;前面的復原方法都需要預先知道退化圖像的PSF,但在實際應用中,經常是不知道PSF的情況下對圖像進行復原,下面介紹盲解卷積復原,對PSF進行估計,[K, PSF2]=deconvblind(J, INITPSF, 30); INITPSF為輸入的PSF估計值,PSF2為真實的PSF的一個估計值,fspecial函數用于創建預定義的濾波算子,可以用來產生噪聲模板,或者使用imnoise來直接添加噪聲,會與imfilter搭配使用,g = imfilter(f, w, filtering_mode, boundary_options, size_options)其中,f為輸入圖像,w為濾波掩模,g為濾波后圖像。filtering_mode用于指定在濾波過程中是使用“相關”還是“卷積”。boundary_options用于處理邊界充零問題,邊界的大小由濾波器的大小確定。具體參數選項見下表:

????????????????????????? 圖一?????????????????????????????????????????????????????????????????????????????????????????????????????????? 圖二

從定義式中可以看到,互相關函數和卷積運算類似,也是兩個序列滑動相乘,但是區別在于:互相關的兩個序列都不翻轉,直接滑動相乘,求和;卷積的其中一個序列需要先翻轉,然后滑動相乘,求和,如果使用算子來模糊圖像,需要算子和圖像混合后,再使用濾波函數

六,圖像分割

圖像分割主要包括邊緣分割技術,閾值分割技術和區域分割技術,邊緣分割和我們之前的邊緣檢測有些類似,常用的有微分算子sobel算子,Roberts算子等,對于圖像中的間斷點,常用的檢測模板為如圖二所示,線段的檢測用的模板也如上圖二所示其中第一個是用來檢測0度的直線,第二個模板是用來檢測45度的直線,Roberts算子J=edge(I, 'roberts');表示采用roberts算子進行邊緣檢測,[J, thresh]=edge(I, 'roberts', 35/255);35/255表示所使用的閾值,thresh表示返回的圖像分割閾值,這個閾值表示的是圖像歸一化以后的閾值,其它的算子類似都是直接在后面改相應的名稱,[J, thresh]=edge(I, 'prewitt', [], 'both');'both'表示水平和垂直都檢測,采用edge()進行邊緣提取得到的圖像為二值圖像,只有黑白兩種顏色 []表示占位符,canny算子用來抑制虛假邊緣,因為它不依賴邊緣方向,canny算子的調用也是通過edge()函數來實現,調用格式和soble算子一致;LOG算子就是拉普拉斯算子,是一種不依賴邊緣方向的二階微分算子,先利用高斯函數進行平滑,然后再利用二階導數過零點的性質,去檢測邊緣,拉普拉斯算子就是一個兩個方向的二階偏導數之和,都是采用edge函數;閾值分割技術通過圖像的直方圖來選取合適的閾值,利用if,else來實現,全局閾值通常都選取波谷的值imhist(i,n)n為指定灰度級顯示直方圖,[width, height]=size(I);得到圖像的行和列,也可以使用im2bw(I)來進行分割,也就是灰度圖像轉為二值圖像,OTSU閾值分割,它的基本原理就是選取一個最佳的閾值將圖像分割為兩部分,使兩部分的方差最大,具有最大的分離性,最佳閾值獲取函數是J=graythresh(I),下面也是可以使用if,else來實現或者通過BW?= im2bw(I,level),level就是閾值,迭代式閾值分割,獲取圖像中像素的最大,最小值min(I(:)),max(I(:));區域生長法是一種將具有相似性質的像素集合起來構成區域,區域增長法根據區域內像素的相似性質來聚集像素點的方法,區域內像素的相似度量可以包括平均灰度值,紋理,顏色等信息,從初始區域開始,將相鄰的具有同樣性質的像素或其它區域歸并到目前的區域中,從而逐步增長區域,直至沒有合并的為止;還有另外一種分水嶺,J=watershed(I, 8);參數里面的8代表8連通,在灰度直方圖中的山脊稱為分水嶺,I=im2double(I) %圖像灰度值歸一化到[0,1]之間

六,圖像變換技術

圖像變換技術時間域就是空間域:圖像Radon變換,在matlab中采用函數radon()進行圖像的Radon變換,函數調用格式為R=radon(I,theta);thera為角度,R為圖像I在theta方向上的變換值,[R, xp]=radon(I, [0, 45]);xp為對應的坐標值,表示在0度和45度方向進行radon變換,x=xp(row),這表示獲取位置,angel=theta(column)這表示獲取角度,radon變換可以用來檢測直線,就是radon變換中的最大值就對應的圖像中最明顯的直線,用函數iradon()來計算radon的反變換k=iradon(R,thera),R為radon變換矩陣,thera為角度;傅里葉變換通過函數fft()進行一維離散傅里葉變換,通過函數ifft()進行一維離散傅里葉反變換,二維的采用的是fft2(),函數的調用格式為Y=fft(X),或者Y=fft2(x,m,n)采用快速傅里葉算法,計算矩陣大小為二維離散傅里葉變換,傅里葉變換的一個意義,在頻譜上是亮暗不一的亮點,如果頻譜中暗的點數更多,那么實際圖像是比較柔和的,如果亮點比較多,說明圖像比價尖銳,通過函數fft2()得到的頻譜圖,坐標原點位于圖像的左上角,可以通過函數fftshift(X),把坐標原點移至圖像的中央,坐標原點是低頻,向外是高頻,可以對圖像在頻域進行濾波和增強,real(L)是復數的實部,J=fftshift(fft2(I));?L1=ifft2(ifftshift(K1));正變換的時候是先變換再平移,而反變換的時候是先平移后變換;圖像離散余弦變換,實際上是傅里葉變換的實數部分,離散余弦變換DCT,有一個重要性質就是大部分可視化的信息都集中在少數的變換系數上,因此離散余弦變換經常用于圖像壓縮,例如國際壓縮標準JPEG格式就采用了離散余弦變換,在傅里葉變換的過程中,如果被展開的函數是實偶函數,那么其傅里葉變換中只包含余弦項,基于傅里葉變換的這一特點,人們提出了離散余弦變換,DCT變換先將圖像函數變換成偶函數的形式,再對其進行二維離散傅里葉變換,DCT變換可以看做一種簡化的傅里葉變換,采用dct()進行一維離散余弦變換,采用idct()進行一維離散余弦反變換,二維的使用dct2(A),還可以用B=dct2(A,[m,n])該函數計算圖像矩陣A的二維離散余弦變換,返回值為B,通過對A補0或裁剪,使得B的大小為m行n列,P=dctmtx(M);這就是離散余弦變換矩陣,離散余弦變換,變換得到的是離散余弦變換系數,離散余弦變換的一個重要用途就是用于圖像的數據壓縮,介紹圖像數據壓縮之前,首先介紹圖像的塊操作函數blkproc(),調用格式如下B=blkproc(A,[m,n],fun),表示對矩陣A進行塊操作,對塊的操作函數為fun,返回值的大小A和B相同,colormap gray;表示圖像顯示的顏色,T'是T 的轉置,B=blkproc(I,[8,8],'P1*x*P2',T,T');% x就是每一個分成的8*8大小的塊,P1*x*P2相當于像素塊的處理函數,p1=T p2=T’,也就是fun=p1*x*p2'=T*x*T'的功能是進行離散余弦變換,B2 = blkproc(B,[8 8],'P1.*x',mask); %舍棄每個塊中的高頻系數,達到圖像壓縮的目的,I2=blkproc(B2,[8,8],'P1*x*P2',T',T); ?%進行反余弦變換,得到壓縮后的圖象,正變換還是反變換關鍵是看T'是在前還是在后,在前反變換;hadamard變換沒有直接的變換函數但是可以用hadamard(n),n是階數產生hadamard變換矩陣,也可以對圖像進行hadamard變換H1=hadamard(h1);H2=hadamard(h2);J=H1*I*H2;hough變換用于檢測幾何形狀,[H, Theta, Rho]=hough(BW, 'RhoResolution', 0.5, 'ThetaResolution', 0.5);H為返回的hough變換矩陣,Theta為變換角度,rho為變換半徑,'RhoResolution', 0.5'RhoResolution'為名字,0.5是值,此外hough還有houghpeaks(),還有houghline();lines = houghlines(BW,theta,rho,peaks)表示在hough變換的基礎上檢測出線,y(:,1)中逗bai號前是行,逗號后du是列,冒號表示從幾到幾。所以y(:,1)表示第一列的所有元素,radon變換的顯示函數是imagesc(J);不是imshow(),如果要顯示fft2()的圖像,最好把圖像進行一下類型轉換double型轉為uint8()型,使用了ifft2()如果要顯示必須imshow(real(L2)),MATLAB圖像處理工具箱實現離散余弦變換有兩種方法:dct2和dctmtx(1)使用函數dct2,該函數用一個基于FFT的算法來提高當輸入較大的方陣時的計算速度。(2)使用由dctmtx函數返回的DCT變換矩陣,這種方法較適合于較小的輸入方陣(例如8×8或16×16),imshow(A,[ ])
inshow(A,[ ])相當于imshow(A,[min(A),max(A)])自動調整數據范圍以方便顯示

七,彩色圖像坐標變換

彩色圖像坐標變換,一種是面向硬件設備的彩色模型RGB,另外一種是面向視覺感知的彩色圖像模型例如HSV模型,HSV模型是通過色調、飽和度、亮度來描述彩色圖像,RGB是由紅、綠、藍三原色混合而成,不同模型之間可以進行轉化,RGB空間轉換到HSV空間,調用函數A=rgb2hsv(M),矩陣M的列分別表示紅色、綠色、藍色的強度,A的列分別表示色調、飽和度、亮度,H=HSV(:,:,1);%提取H矩陣,reshape(A,[2,3])?將?A?重構為一個 2×3 矩陣,維度可以改變但是元素的個數是需要保持不變的,c = jet(m)?返回包含?m?種顏色的顏色圖,反過來也是一樣的hsv2rgb(H),RGB空間到ycbcr空間,調用函數K=rgb2ycbcr(RGB),RGB必須是一個mxnx3的矩陣,當然也可以K=ycbcr2rgb(ycbcr)

八,圖像壓縮編碼

圖像壓縮編碼,編碼效率用編碼參數來衡量數字圖像的熵,圖像的平均碼長,編碼效率,每秒所需的傳輸比特數為bps=mxnxR/兩幀時間間隔,霍夫曼編碼是一種把概率大的信息符號以短字長編碼,概率小的以長字編碼,這種編碼形式的平均碼子長度最短,具體的方法另外一篇文章中有仔細的說明,sort()是排序函數,Y = floor(X)四舍五入函數,看函數都是從最核心的部分開始看代碼,因為其它的變量,或者循環之類都是為,最核心代碼服務的,[dict,avglen] = huffmandict(symbols,p);%產生霍夫曼編碼詞典,返回編碼詞典dict和平均碼長avglen,編碼詞典就是說比如16編碼為001,15編碼為100,以后在數據中出現直接來字典里面找,huffmanenco(actualsig,dict); %利用dict對actuals來編碼,其結果存放在compress中,matlab的數據類型比如uint8直接決定了數據的范圍2^8,可以直接在屏幕上disp('hello'),打印輸出,

九,圖像特征分析

圖像特征分析:顏色矩通常直接在RGB空間來計算,顏色分布信息主要集中在低階矩,一階矩就是均值,反映了每個顏色分量的平均強度用函數mean2(R),二階矩就是方差,即不均勻性std(std(R));???,三階矩是偏度,三階矩用定義,可用這些信息來辨識物體;許多圖像識別系統都采用顏色直方圖作為圖像的顏色特征,它所描述的是不同色彩在整幅圖像中所占的比例,不關心圖像顏色分布的統計特性,常用的顏色空間有RGB顏色空間和HSV空間,imhist(I(:,:,1))%顯示紅色分辨率下的直方圖,灰度直方圖的分布,如果都在左邊說明該分量主要在較暗的地方出現,如果在最右邊說明,該分量主要集中在亮處,h = hsv(:, :, 1);%為色調h賦值,這個模型中顏色的參數分別是:色調(H)大概可以理解為圖像上有幾種顏色,飽和度(S)圖像的鮮艷程度,明度(V)圖像是亮還是暗,這些特征可以用來做圖像分割,比如分離花和葉子;紋理特征反映物品的質地,比如粗糙度、光滑度、顆粒度,隨機性和規范性,衛星遙感地表圖像的分析常采用紋理分析,這是因為地表的山脈、河流、森林、城市建筑等表現出不同的紋理,下面介紹幾種紋理特征的提取方法比如灰度差分統計,自相關函數,灰度共生矩陣,還有就是基于頻譜特征的分析系,常用的紋理特征有平均值、對比度、熵、能量,灰度直方圖不能直接進行紋理分析,熵值越大圖形紋理越粗糙,平均值反映圖像的光滑度;自相關函數是用來描述圖像的粗糙度,小數值的紋理測度表示細紋理,大數值的紋理測度表示粗紋理,通常采用自相關函數作為紋理測度,mesh()函數用來畫三維圖像,光滑的自相關函數變化較小,粗糙的自相關函數變化較快,灰度共生矩陣是有函數的glcms = graycomatrix(I,Name,Value,...),glcm = graycomatrix(I,'Offset',[0 2]);? %圖像I的灰度共生矩陣,2表示當前像素與鄰居的距離為2,offset為[0 2]表示角度為0為水平方向,要快速的看懂matlab函數就是描述前后注意,還要看例子的參數說明,灰度共生矩陣不直觀,常常需要二階統計量,matlab用stats = graycoprops(glcm,{'contrast','homogeneity'}),'contrast表示對比度,homogeneity同質性,也就是說是對角線的緊密程度,里面的參數還可以是Correlation,Energy一個表示相關,一個表示能量stats是一個結構體,contrast是一個成員變量,具體參考p323;頻譜分析法用來在傅里葉變換處獲得空間不容易 獲得的紋理特征如周期,功率譜等,實際應用中將頻譜轉換到極坐標簡化為S(r,),確定r則S()是一維函數可以確定以原點為中心的圓上行為特征,給定可以得到從原點某方向上的放射行為,在數字圖像處理中通常把周期的變為非周期處理,頻譜分析方法還有加伯變換Gabor(gabor)和小波變換具體可以參照P328。

十,圖像形狀特征

10.1形狀特征描述

形狀特征描述一般是在物體從圖像中分割出來以后進行分析,主要包括圖像的輪廓提取和區域劃分:先對輪廓進行描述在對邊界特征進行描述,鏈碼表示方法就是定好起點后,用4方向或者8方向來描述圖形,多變形近似,有三種方法1,基于最小周長的多邊形法即把線段拉直,還有兩種基于最小均方誤差的方法,直接坐標轉為極坐標[cita,r]=cart2pol(xp1,yp1);%直角坐標轉換成極坐標,polar(cita,r);%畫出極坐標下的輪廓圖,邊緣提取使用edge()函數,區域特征描述,1區域面積描述法,用stats = regionprops(L,properties)來統計區域內的像素點的個數,2四叉樹描述法S = qtdecomp(I,threshold)該函數實現對四叉樹的分解,I為灰度圖像,threshold為閾值,S為分解后的圖像,blocks = repmat(uint8(0),size(S));%矩陣擴充為S的大小3拓撲關系,就是孔數和歐拉數,使用函數eul = bweuler(I,n),eul為歐拉數,I為圖像,I為二值圖像如果不是需要使用im2bw(),n=4或8表示4連通和8連通,Image2=fliplr(I);%對圖像做鏡像變換---鏡像變換 ,log()函數用于縮小圖像,還有一種方法矩描述

10.2形態學數字圖像處理

形態學數字圖像處理,數字形態學是建立在微分幾何以及隨機論基礎上的,集合論是數學形態學的基礎,腐蝕運算和膨脹運算是數學形態學的兩個基本變換,參與運算就是兩個對象,,圖像A感興趣的目標,圖像B結構元素,結構元素通常是個圓盤,但是它可以是任何元素,結構元素是腐蝕和膨脹最基本的組成部分,在matlab中結構體元素生產函數strel()創建任意大小和形狀的結構元素對象,膨脹是將與物體接觸的所有背景點合并到該物體中,使邊界向外部擴張的過程,通過膨脹可以填充圖像中的小孔,A+B,腐蝕是消除 邊界點,使邊界向內部收縮過程,可以消除小且無意義的物體,集合被結構元素腐蝕,記為A-B,采用bw2=imdilate(I, se),I是圖像se是結構元素,imerode()可以進行腐蝕操作,開運算即先采用結構元素做腐蝕運算,然后再做膨脹運算,使用相同的結構元素,計為(A-B)+B函數J=imopen(I, se)通過開運算去除了圖像中比較小的點,閉運算(A+B)-B,通過函數J=imclose(I, se)有利于把區域連接為一塊;高帽濾波是A-開運算,高帽濾波可以增強圖像的對比度,調用形式J=imtophat(I, se);,圖像的低帽濾波A-閉運算,低帽濾波可以增強圖像的邊緣,調用形式K=imbothat(I, se);imadd(I, J)圖像相加,imsubtract(I,J)兩個圖像相減;圖像的填充通過函數imfill(),J=imfill(I, 'holes')通過holes填充圖像中的空洞,返回局部極大值,局部極大值不是最大值,調用如下bw=imregionalmax(I),此函數返回的最大值對應1,其它是0,同樣的局部最小值bw=imregionalmin(I);圖像邊界的測定,通過膨脹腐蝕獲取圖像邊界,膨脹的結果減去腐蝕的結果就是圖像的邊界,還可以通過函數bwperim(I,n)獲取二值圖像的邊緣,n在二維圖像中是4或者8連通,二值圖像的形態學操作,可以通過bwmorph()進行二值圖像的大量形態學操作,例如圖像的骨架化,圖像的細化,以及開操作和閉操作,函數功能比較強大,J=bwmorph(I, 'thin');BW2 = bwmorph(BW,operation,n)對二值圖像進行n次指定的形態學處理n=Inf表示無窮大,移除圖像的內部點保留邊界也是用的此函數,不過調用的參數為remove,腐蝕膨脹是最基本的形態學操作,下面還有一些二值圖像的其他形態學操作,包括極限腐蝕,查表操作,圖像的標記,對象的選擇,圖像的面積和歐拉數等,采用函數bwulterode()進行極限腐蝕,每個對象最后變為一個像素點為止;查表操作,用函數makelut()用于建立表單,函數applylut()用于查表操作,函數調用格式為lut=makelut(fun,n),其中fun為判斷條件的函數,n為領域大小可以去2或者3,查表調用格式為applylut(BW,LUT)該函數采用查表的方式來對二值圖像的領域進行操作,LUT為建立的表單,二值圖像的標記,對于不同的連通區域分配不同的編號,采用函數bwlabel()只支持二維的二值圖像和bwlabeln()支持任意維度的二值圖像,函數L=bwlabel(bw,n)n為連通類型為4或者8連通,L標記矩陣和原來的二值圖像具有相同的大小,還可以是[L, num]=bwlabel(BW, 8),num為連通區域的數目,二值圖像的對象選擇使用J=bwselect(I, c, r, 4);c為橫坐標數組,r為坐標數組,4是4連通的意思,函數的意思就是從I中把這幾個坐標的像素值取出來;二值圖像的面積,面積是二值圖像中像素值為1的像素個數,采用函數bwarea()計算二值圖像的面積,total=bwarea(BW);

十一,小波變換

小波變換家族Waveletfamilies,或者是Waveletfamilies(‘n’),waveinfo('fk')看具體的信息,小波是一種快速衰減的波,震蕩有零值,不像正弦波,縮放,拉伸和縮放,移動,就是讓小波從左到右在信號上走,信號在時間刻度進行縮放,小波有一個帶通的性質,相同頻率的比率因子變化導致拉伸小波,對應較低的頻率,較小的比率導致壓縮小波,高頻拉伸小波有助于捕捉緩慢的變化,縮小小波有助于捕獲突然的變化,轉移小波變換,離散小波的運用是去燥和壓縮,連續小波變換的輸出是系數,傅里葉變換是一個全時域的變換,全時域也就是說是負無窮到正無窮,為了解決傅里葉變換無限大的問題,我們提出了時窗,即Gabor變換也叫短時傅里葉變化,但是缺點是分辨率單一,因為在時域的窗口小,頻率的就會寬,一旦寬了之后分辨率就會降低,一旦時域確定頻域就會確定,不太自由,之后就提出了小波變換wavelet transtorm (WT),一元積分相當于在某個方向上的投影,小波這里就去尋找一個最佳的投影函數(a,b,t)a是時窗的中心頻率,b是頻率的量W,壓縮降噪就是把頻率特別小或者特別大的地方去掉,小波變換的其他具體知識之后再補充,此處介紹小波的MATLAB實現,stem()是柱形的畫圖函數,小波函數和尺度函數wavefun2()只適合正交小波,具體參照P387,

小波變換的壓縮是基于人眼對高頻信息不敏感的特性,低頻部分的分量全部或部分保留,去掉高頻的部分,系數編碼時小波變換用于圖像壓縮的核心,壓縮的實質是對系數的量化壓縮,Y=wcodemat(X,nbc);%對圖像的數值矩陣進行偽彩色編碼,wcodemat還有 解壓的能力,[C,S]=wavedec2(X,2,'db4'); %對圖像小波分解,image()從數組顯示圖像,下圖a,b分別是壓縮和解壓縮的圖

十二,Simulink數字圖像處理

Simulink是matlab的圖像化編程工具,video and image processing blockset,此處介紹基于simulink的視頻及數字圖像處理,在下面這個地方啟動,computer vision system toolbox需要先建立simulink,然后在里面的tool里面library找,輸入在sources中設置圖像路徑,在sinks中的view觀看結果,直接用鼠標把模塊拖到simulink的工作空間或者右鍵直接add進來,用鼠標即可連線,類型轉換是在convertion中,圖像幾何變換,雙擊模塊可以修改里面的參數,其實一個模塊就對應著一些matlab的語句,

???????????????????? Analysis&Enhancement?????????????????????????????????????????????????????????????????? Convertions

???????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? Filtering?????????????????????????????????????????????????????????????????????????

??????????????????????????????????????????

?????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 形態學操作(? Morephological Operations)

總結

以上是生活随笔為你收集整理的MATLAB数字图像处理详细总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。