灰度圖像之同現矩陣的求解算法與實現

灰度圖像之同現矩陣的求解算法與實現


  • 算法


  •   實現

1.      實驗平臺與數據

本算法使用Matlab語言實現,實驗平臺爲Windows 8 32位操作系統、4GB內存(可用爲2.31GB)、Matlab2013b。

數據1:課堂例子



數據2:如下,其中,d=(1,0)


 

數據3:如下圖2所示:


2.      實驗程序源代碼

1)  coom.m文件源碼

function [ P ] = coom( I,d)

% ----------------------計算矩陣或圖像的同現矩陣-----------------------------

% Input

%       I:灰度圖像文件名矩陣(整數值(0~255))

%       d:位移矢量

% Output

%       同現矩陣 P:L,L

% Usage:

%      SSELMHSIC('ImageFileName',d)

%       求灰度圖像的同現矩陣

%    Or:

%      SSELMHSIC(I,d)

%       求矩陣I的同現矩陣

%-------------------------------------------------------------------------

% Sample

    %%%%   Authors:    Zhi Liu

    %%%%   XiDian University Student

    %%%%   EMAIL:     [email protected]

    %%%%   DATE:       8-11-2013

%% 對數據進行預處理

if ~exist('I','var') || isempty(I)

    error('輸入圖像 I 未定義爲空');

end

if ~exist('d','var') || isempty(d) ||numel(d) ~= 2

     error('位移矢量 d 未定義爲空 d中的元素超過2');

end

if isstr(I)

    I = imread(I);

end

if d(1)<0 ||d(2)<0

     error('位移矢量 d 的元素應該大於0');

end

[M,N,~] = size(I);

%% 統計灰度級的最大值

% L = length(unique(I));

L = max(max(I))+1;

%% 計算同現矩陣

P = zeros(L,L); % 預分配內存提高速度

for i = 1:M-d(2)         % 對圖像進行逐元素掃描

    for j = 1:N-d(1)

        ii =I(i,j)+1;

        jj =I(i+d(2),j+d(1))+1;

        P(ii,jj) =P(ii,jj) + 1;

    end

end

%% 以圖像的形式顯示同現矩陣P

figure

subplot(121)

imshow(I,[]);

title('原灰度級圖像');

subplot(122)

imshow(P,[]);

title('左圖對應的同現矩陣');

end

2)   ImaM.m文件源碼(存儲數據1和數據2灰度圖像矩陣)

function [ IM ] = ImaM( opt)

%UNTITLED Summary of this function goes here

%   Detailedexplanation goes here

if opt == 1

    IM =[2     1    2     0     1

         0     2    1     1     2

         0     1    2     2     0

         1     2    2     0     1

         2     0    1     0     1];

elseif opt == 2

    IM =[2     1    2     2

         1     4    4     1

         4     1    2     2

         1     2    4     4

         2     1    1     2];

end

 

end

 

3.      實驗結果

1)       數據1

在命令窗口輸入P=coom(ImaM(1),[1,1])回車後結果如下圖4(a)所示:

    


由上圖(a)和圖1(b)可知程序運行正確無誤。


圖5 數據1運行結果圖形化顯示

2)       數據2

在命令窗口輸入P=coom(ImaM(2),[1,0])回車後結果如上圖4(b)所示,對比改圖與圖2(b),可知程序正確無誤。


圖6 數據2運行結果圖形化顯示

3)       數據3

在命令窗口輸入P=coom('lena.png',[1,1]);回車後即可得到同現矩陣 ,由於該圖像數據較大,故僅以圖像方式顯示如下圖:

圖7 數據3運行結果圖形化顯示

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章