wolsh基函数以及二维基图

二维基图如上,基函数直接用哈达玛矩阵部分就可以获得,程序如下:

test.m

%清除内存
clear all;close all;clc;
%建立哈达玛矩阵
a=hadamard(4);
%绘制图像点数的个数
step = 0.1;
step = step/length(a);
fx = 0:step:1-step;
%基函数的模板
y=fx.^0;
%进行降采样
y=y(1:length(a):end);
%计算克罗内特积
z = kron(a,y);
[h l]=size(z);  %获得数组宽,高
z_new = zeros(h,l); %创建一个相同的z用来存放结果
%十进制-二进制-倒序-格雷-十进制
for i=0:1:h-1
   len = log2(h);
   num = dec2bin(i,len);
   num = num(:,end:-1:1);
   num = bin2dec(num);
   num = gray2int(num);
   z_new(num+1,:) = z(i+1,:); 
end

w=zeros(l,l,length(a));
for i=1:1:length(a)
   for j=1:1:length(a)
       w(:,:,j+(i-1)*length(a)) = (z_new(i,:)' * z_new(j,:));
   end
end

for i=1:1:length(a)
   for j=1:1:length(a)
       subplot(length(a),length(a),j+(i-1)*length(a));
       imshow(w(:,:,j+(i-1)*length(a)));
   end
end

int2gray.m

function  g = int2gray(k)
%  g = int2gray(k) = G(k+1) ,  where  G = grays(n)  for
%  n  big enough,  quickly without generating all of  G ,
%  but only if nonnegative integer  k <= bitmax .  See
%  also  grays.m,  grays2int.m  and  graystep.m .
%                                 W. Kahan,  8 July 2007

if(any(any( (k<0)|(k~=round(k))|(k>bitmax) ))),  K = k,
    error(' int2gray(K)  needs an array K of small nonnegative integers.')
  end
g = bitxor(k, fix(0.5*k)) ;


gray2int.m


function  k = gray2int(g)
%  k = gray2int(g)  solves  g = int2gray(k)  for  k ,
%  but only if nonnegative integer  g <= bitmax .  The
%  time taken is proportional to the number of bits
%  needed to hold  g .  See also  grays.m,  int2gray.m,
%  and  graystep.m .             W. Kahan,  8 July 2007

if(any(any( (g<0)|(g~=round(g))|(g>bitmax) ))),  G = g,
    error(' gray2int(G)  needs an array G of small nonnegative integers.')
  end
k = g ;
while any(any(g))
    g = fix(0.5*g) ;  k = bitxor(k, g) ;  end


你可能感兴趣的:(机器视觉,图像处理,数据挖掘,MATLAB,数学建模)