1樓:楊好巨蟹座
matlab提供了現成的函式
graycomatrix生成共生矩陣
graycoprops計算其特徵值
具體用法:
glcm = graycomatrix(i)
從影象i建立灰度共生矩陣glcm。通過計算具有灰度級i和灰度級j的畫素對在水平方向相鄰出現的頻繁程度。glcm中的每個元素說明了水平方向相鄰畫素對出現的次數。
如果灰度級為l則glcm的維數為l*l。
2.glcms = graycomatrix(i,param1,val1,param2,val2,...)
根據引數對的設定,返回一個或多個灰度共生矩陣。
引數說明:
'graylimits':灰度界限,為二元向量[low high]。灰度值小於等於low 時對應1,大於等於high時對應於灰度級。
如果引數設為,則共生矩陣使用影象的最小和最大灰度值作為界限,即[min(i(:)) max(i(:))]。
'numlevels':整數,說明i中進行灰度縮放的灰度級數目。例如,如果numlevel設為8,則共生矩陣縮放i中的灰度值使它們為1到8之間的整數。
灰度級的數目決定了共生矩陣glcm的尺寸。預設情況:數字影象:
8;二進位制影象:2。
'offset':p行2列整型矩陣,說明感興趣畫素與其相鄰畫素之間的距離。每行是一個說明畫素對之間偏移關係的二元向量[row_offset, col_offset]。
行偏移row_offset是感興趣畫素和其相鄰畫素之間的間隔行數。列偏移同理。偏移常表達為一個角度,常用的角度如下:
(其中d為畫素距離)
角度 0 45 90 135
offset [0,d] [-d d] [-d 0] [-d -d]
3.[glcms,si] = graycomatrix(...)
返回縮放影象si,si是用來計算灰度共生矩陣的。si中的元素值介於1和灰度級數目之間。
graycoprops:得到灰度共生矩陣得到各種屬性
stats = graycoprops(glcm, properties):從灰度共生矩陣glcm計算靜態屬性。glcm是m*n*p的有效灰度共生矩陣。
如果glcm是一個灰度共生矩陣的矩陣,則stats是包括每個灰度共生矩陣靜態屬性的矩陣。
graycoprops正規化了灰度共生矩陣,因此元素之和為1。正規化的glcm中的元素(r,c)是具有灰度級r和c的定義的空間關係的畫素對的聯合概率。graycoprops使用正規化的glcm來計算屬性。
屬性引數如下:
1. 'contrast' : 對比度。返回整幅影象中畫素和它相鄰畫素之間的亮度反差。取值範圍:[0,(glcm行數-1)^2]。灰度一致的影象,對比度為0。
2. 'correlation' : 相關。返回整幅影象中畫素與其相鄰畫素是如何相關的度量值。取值範圍:[-1,1]。灰度一致的影象,相關性為nan。
3. 'energy' : 能量。返回glcm中元素的平方和。取值範圍:[0 1]。灰度一致的影象能量為1。
4. 'homogemeity' : 同質性。返回度量glcm中元素的分佈到對角線緊密程度。取值範圍:[0 1]。對角矩陣的同質性為1。
2樓:匿名使用者
% 影象檢索——紋理特徵
%基於共生矩陣紋理特徵提取,d=1,θ=0°,45°,90°,135°共四個矩陣
%所用影象灰度級均為256
%參考《基於顏色空間和紋理特徵的影象檢索》
%function : t=texture(image)
%image : 輸入影象資料
%t : 返回八維紋理特徵行向量
% function t = texture(image)
gray = imread('d:\result5.bmp');
[m,n,o] = size(gray);
m = 128;
n = 128;
%1.將各顏色分量轉化為灰度
% gray = double(0.3*image(:,:,1)+0.59*image(:,:,2)+0.11*image(:,:,3));
%2.為了減少計算量,對原始影象灰度級壓縮,將gray量化成16級
for i = 1:m
for j = 1:n
for n = 1:256/16
if (n-1)*16<=gray(i,j)&gray(i,j)<=(n-1)*16+15
gray(i,j) = n-1;
endend
endend
%3.計算四個共生矩陣p,取距離為1,角度分別為0,45,90,135
p = zeros(16,16,4);
for m = 1:16
for n = 1:16
for i = 1:m
for j = 1:n
if j1&j<
p(m,n,2) = p(m,n,2)+1;
p(n,m,2) = p(m,n,2);
endif i<
p(m,n,3) = p(m,n,3)+1;
p(n,m,3) = p(m,n,3);
endif i p(m,n,4) = p(m,n,4)+1; p(n,m,4) = p(m,n,4); endend endif m==n p(m,n,:) = p(m,n,:)*2; endend % 對共生矩陣歸一化 for n = 1:4 p(:,:,n) = p(:,:,n)/sum(sum(p(:,:,n))); %4.對共生矩陣計算能量、熵、慣性矩、相關4個紋理引數 h = zeros(1,4); i = h; ux = h; uy = h; deltax= h; deltay = h; c =h; for n = 1:4 e(n) = sum(sum(p(:,:,n).^2)); %%能量 for i = 1:16 for j = 1:16 if p(i,j,n)~=0 h(n) = -p(i,j,n)*log(p(i,j,n))+h(n); %%熵 endi(n) = (i-j)^2*p(i,j,n)+i(n); %%慣性矩 ux(n) = i*p(i,j,n)+ux(n); %相關性中μx uy(n) = j*p(i,j,n)+uy(n); %相關性中μy endend endfor n = 1:4 for i = 1:16 for j = 1:16 deltax(n) = (i-ux(n))^2*p(i,j,n)+deltax(n); %相關性中σx deltay(n) = (j-uy(n))^2*p(i,j,n)+deltay(n); %相關性中σy c(n) = i*j*p(i,j,n)+c(n); endend c(n) = (c(n)-ux(n)*uy(n))/deltax(n)/deltay(n); %相關性 %求能量、熵、慣性矩、相關的均值和標準差作為最終8維紋理特徵 a1 = mean(e) b1 = sqrt(cov(e)) a2 = mean(h) b2 = sqrt(cov(h)) a3 = mean(i) b3 = sqrt(cov(i)) a4 = mean(c) b4 = sqrt(cov(c)) sprintf('0,45,90,135方向上的能量依次為: %f, %f, %f, %f',e(1),e(2),e(3),e(4)) % 輸出資料; sprintf('0,45,90,135方向上的熵依次為: %f, %f, %f, %f',h(1),h(2),h(3),h(4)) % 輸出資料; sprintf('0,45,90,135方向上的慣性矩依次為: %f, %f, %f, %f',i(1),i(2),i(3),i(4)) % 輸出資料; sprintf('0,45,90,135方向上的相關性依次為: %f, %f, %f, %f',c(1),c(2),c(3),c(4)) % 輸出資料; 這是我最近用過的求灰度共生矩陣及其四個引數的程式,你可以參考一下。 2的8次方 256,8個bit位可表示一個畫素,8bit 1位元組理論上是512 512 262144 byte 256 kb 不同格式的影象壓縮演算法不一樣,所以實際大小也不同bmp是無失真壓縮,512 512灰度圖實際大小就是256kb其它格式大小比bmp格式要小,但是會犧牲一些定的影象質量影象... 灰度的數字影象中,每個畫素用一個數表示,整個影象用矩陣表示,矩陣的行數就是影象的高,矩陣的列數就是影象的寬。對於彩色影象需要三通道表示,matlab裡表示為三維矩陣,其中第三維的長度是3。imresize函式可以改變影象矩陣的尺寸,可以直觀理解為不保持寬高比的任意縮放。當然可以用擷取的方法縮小影象尺... 檰寶寶 按一下操作 a double m g mat2gray a figure 1 imshow g imwrite g,kkk.bmp 注意 m是灰度值矩陣.matlab 如何將彩圖轉成灰度圖 要當技術宅 需要準備的工具 電腦,matlab軟體。1 首先在matlab祝主介面輸入一下指令清屏 c...一幅灰度影象,矩陣為512 512,灰度級別為256,在計算
matlab灰度影象矩陣的大小問題(入門級)
matlab怎麼將灰度影象轉為rgb影象