www.pudn.com > Space.rar > Space.m
%**************************************************************************
% 图像检索——空间特征提取
%利用马尔可夫模型估计的条件概率做为空间特征向量
%Image : 输入图像数据
%
%**************************************************************************
function Sp = Space(Image)
% Image = imread('e:\\2\\2.jpg');
% [M,N,O] = size(Image);
M = 256;
N = 256;
%--------------------------------------------------------------------------
%rgb彩色图像转换到hsv空间
%--------------------------------------------------------------------------
Gray=rgb2hsv(Image);
%--------------------------------------------------------------------------
%将图像按8*8分块,并计算每块小区域的均值和标准差,并写出状态矩阵图
%--------------------------------------------------------------------------
for i = 1:256/8
for j = 1:256/8
aaaa(i,j)=mean2(Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,1));
m_matrix_h(i,j) = mean(mean(Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,1)));
delta_h(i,j) = sqrt(sum(sum((Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,1)-m_matrix_h(i,j)).^2))/64);
m_matrix_s(i,j) = mean(mean(Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,2)));
delta_s(i,j) = sqrt(sum(sum((Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,2)-m_matrix_s(i,j)).^2))/64);
m_matrix_v(i,j) = mean(mean(Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,3)));
delta_v(i,j) = sqrt(sum(sum((Gray(8*(i-1)+1:8*i,8*(j-1)+1:8*j,3)-m_matrix_v(i,j)).^2))/64);
if m_matrix_h(i,j)<0.01
m_matrix_h(i,j)=0.01;
end
if m_matrix_s(i,j)<0.01
m_matrix_s(i,j)=0.01;
end
if m_matrix_v(i,j)<0.01
m_matrix_v(i,j)=0.01;
end
%写出状态矩阵图,按统计特性,取两个阈值0.15,0.05
if delta_h(i,j)>=0.15
state_h(i,j) = 3;
elseif delta_h(i,j)<=0.05
state_h(i,j) = 1;
else
state_h(i,j) = 2;
end
if delta_s(i,j)>=0.15
state_s(i,j) = 3;
elseif delta_s(i,j)<=0.05
state_s(i,j) = 1;
else
state_s(i,j) = 2;
end
if delta_v(i,j)>=0.15
state_v(i,j) = 3;
elseif delta_v(i,j)<=0.05
state_v(i,j) = 1;
else
state_v(i,j) = 2;
end
end
end
%--------------------------------------------------------------------------
%根据马尔可夫模型估计出转移概率矩阵,将其作为空间特征
%--------------------------------------------------------------------------
%用均值代表图像块,并将均值矩阵和状态矩阵转化为一维向量,
M_matrix_h = ceil(reshape(m_matrix_h.*100,1,[]));
M_matrix_s = ceil(reshape(m_matrix_s.*100,1,[]));
M_matrix_v = ceil(reshape(m_matrix_v.*100,1,[]));
State_h = reshape(state_h,1,[]);
State_s = reshape(state_s,1,[]);
State_v = reshape(state_v,1,[]);
[tran1,e1] = hmmestimate(M_matrix_h, State_h);
[tran2,e2] = hmmestimate(M_matrix_s, State_s);
[tran3,e3] = hmmestimate(M_matrix_v, State_v);
%只考虑自关联
Sp = [reshape(diag(tran1),1,[]),reshape(diag(tran2),1,[]),reshape(diag(tran3),1,[])];