灰度圖像之同現矩陣的求解算法與實現
- 算法
- 實現
1. 實驗平臺與數據
本算法使用Matlab語言實現,實驗平臺爲Windows 8 32位操作系統、4GB內存(可用爲2.31GB)、Matlab2013b。
數據1:課堂例子
數據2:如下,其中,d=(1,0)
數據3:如下圖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運行結果圖形化顯示