灰度图像之同现矩阵的求解算法与实现

来源:互联网 发布:sql 分页查询 编辑:程序博客网 时间:2024/05/16 18:12

灰度图像之同现矩阵的求解算法与实现


  • 算法


  •   实现

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:     zhiliu.mind@gmail.com

    %%%%   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运行结果图形化显示

 

0 0
原创粉丝点击