二维基图如上,基函数直接用哈达玛矩阵部分就可以获得,程序如下:
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
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