对照论文中的示例图和文章给出的代码来梳理
从图中看到,整个网络有三个关键步骤,Patch-mean removal 、 PCA filter convolution与Binary quantization &mapping ,分别是局部均值化、PCA卷积、二值化与直方图映射
im2col_mean_removal.m
输入
图片矩阵 InImg(m*n)
采样矩阵大小 patchsize12= [k1,k2]
图片通道数 chl(默认为1)
在输入的矩阵InImg上,按行滑动采样矩阵,得到patch,每个patch按列展开,减去均值成为输出矩阵im的列,所以输出矩阵im为 k1∗k2 行, (m−k1)∗(n−k2) 列
function im = im2col_mean_removal(varargin)
%
NumInput = length(varargin);
InImg = varargin{
1};
patchsize12 = varargin{
2};
z = size(InImg,3);
im = cell(z,1);
if NumInput == 2
for i = 1:z
iim = im2colstep(InImg(:,:,i),patchsize12); %窗口采样,然后按列展开为列向量
im{i} = bsxfun(@minus, iim, mean(iim))'; %去均值
% iim = bsxfun(@minus, iim, mean(iim));
% im{i} = bsxfun(@minus, iim, mean(iim,2))';
end
else
for i = 1:z
iim = im2colstep(InImg(:,:,i),patchsize12,varargin{
3});
im{i} = bsxfun(@minus, iim, mean(iim))';
% iim = bsxfun(@minus, iim, mean(iim));
% im{i} = bsxfun(@minus, iim, mean(iim,2))';
end
end
im = [im{:}]';
PCA_FilterBank.m
输入为InImg (cell structure)
PatchSize 采样窗口大小
NumFilter 提取主成分个数
对于每一张图片,调用前面的im2col_mean_removal.m函数,得到
X=[X1,