模式识别
时间:2011-12-23
来源:互联网
1. 已知有K个N维向量[x1,x2,…,xK],希望使用PCA方法将N维向量降维为n维(n<N),请在下面用文字和公式写出降维步骤。
2. 有一张大小为100x100像素的人脸图像,希望提取其LBP直方图特征,请在下面用文字和公式写出LBP直方图特征提取过程。(参数为:图像分为7x7=49个小块(blocks),提取uniform patterns,所有non-uniform patterns作为一个pattern。)
4. 请编程调用OpenCV中的物体检测函数,实现人脸检测和人眼检测功能;
(可参考OpenCV例子代码 samples/c/facedetect.cpp;人脸和人眼的分类器分别是data/haarcascades/haarcascade_frontalface_alt.xml;data/haarcascades/haarcascade_eye_tree_eyeglasses.xml )
已实现的功能:
1. …
2. …
请帖程序源代码于下方:
2. 有一张大小为100x100像素的人脸图像,希望提取其LBP直方图特征,请在下面用文字和公式写出LBP直方图特征提取过程。(参数为:图像分为7x7=49个小块(blocks),提取uniform patterns,所有non-uniform patterns作为一个pattern。)
4. 请编程调用OpenCV中的物体检测函数,实现人脸检测和人眼检测功能;
(可参考OpenCV例子代码 samples/c/facedetect.cpp;人脸和人眼的分类器分别是data/haarcascades/haarcascade_frontalface_alt.xml;data/haarcascades/haarcascade_eye_tree_eyeglasses.xml )
已实现的功能:
1. …
2. …
请帖程序源代码于下方:
作者: linhao888888 发布时间: 2011-12-23
代码
% 输入一个图像im,输出lbpimage
% lbpimage长和宽分别比im小2个像素
% lbpimage中的像素值表示的是lbp pattern (lbp code)
function lbpimage = lbp(im)
spoints=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];
% 确定输入图像的尺寸
[ysize xsize] = size(image);
neighbors=size(spoints,1);
miny=min(spoints(:,1));
maxy=max(spoints(:,1));
minx=min(spoints(:,2));
maxx=max(spoints(:,2));
% 块的大小,每个LBP的代码是计算在一个块大小bsizey* bsizex
bsizey=ceil(max(maxy,0))-floor(min(miny,0))+1;
bsizex=ceil(max(maxx,0))-floor(min(minx,0))+1;
% 块中的坐标原点(0,0)
origy=1-floor(min(miny,0));
origx=1-floor(min(minx,0));
% 计算dx和dy
dx = xsize - bsizex;
dy = ysize - bsizey;
% 填入中心像素矩阵C
C = [origy:origy+dy,origy:origy+dy];
C = image(origy:origy+dy,origy:origy+dy,C);
d_C = double(C);
bins = 2^neighbors;
% 初始化结果矩阵
result=zeros(dy+1,dx+1);
%计算LBP像素值
for i = 1:neighbors
y = spoints(i,1)+origy;
x = spoints(i,2)+origx;
fy = floor(y); cy = ceil(y); ry = round(y);
fx = floor(x); cx = ceil(x); rx = round(x);
% 检查是否需要插值
if (abs(x - rx) < 1e-6) && (abs(y - ry) < 1e-6)
% 不需要插值
N=[ry:ry+dy,rx:rx+dx];
N = image(ry:ry+dy,rx:rx+dx,N);
D = N >= C;
else
% 需要插值
ty = y - fy;
tx = x - fx;
% 计算插值权重
w1 = (1 - tx) * (1 - ty);
w2 = tx * (1 - ty);
w3 = (1 - tx) * ty ;
w4 = tx * ty ;
% 计算插值像素值
N = w1*d_image(fy:fy+dy,fx:fx+dx) + w2*d_image(fy:fy+dy,cx:cx+dx) + ...
w3*d_image(cy:cy+dy,fx:fx+dx) + w4*d_image(cy:cy+dy,cx:cx+dx);
D = N >= d_C;
end
v = 2^(i-1);
result = result + v*D;
lbpimage=result;
end
% 输入一个图像im,输出lbpimage
% lbpimage长和宽分别比im小2个像素
% lbpimage中的像素值表示的是lbp pattern (lbp code)
function lbpimage = lbp(im)
spoints=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];
% 确定输入图像的尺寸
[ysize xsize] = size(image);
neighbors=size(spoints,1);
miny=min(spoints(:,1));
maxy=max(spoints(:,1));
minx=min(spoints(:,2));
maxx=max(spoints(:,2));
% 块的大小,每个LBP的代码是计算在一个块大小bsizey* bsizex
bsizey=ceil(max(maxy,0))-floor(min(miny,0))+1;
bsizex=ceil(max(maxx,0))-floor(min(minx,0))+1;
% 块中的坐标原点(0,0)
origy=1-floor(min(miny,0));
origx=1-floor(min(minx,0));
% 计算dx和dy
dx = xsize - bsizex;
dy = ysize - bsizey;
% 填入中心像素矩阵C
C = [origy:origy+dy,origy:origy+dy];
C = image(origy:origy+dy,origy:origy+dy,C);
d_C = double(C);
bins = 2^neighbors;
% 初始化结果矩阵
result=zeros(dy+1,dx+1);
%计算LBP像素值
for i = 1:neighbors
y = spoints(i,1)+origy;
x = spoints(i,2)+origx;
fy = floor(y); cy = ceil(y); ry = round(y);
fx = floor(x); cx = ceil(x); rx = round(x);
% 检查是否需要插值
if (abs(x - rx) < 1e-6) && (abs(y - ry) < 1e-6)
% 不需要插值
N=[ry:ry+dy,rx:rx+dx];
N = image(ry:ry+dy,rx:rx+dx,N);
D = N >= C;
else
% 需要插值
ty = y - fy;
tx = x - fx;
% 计算插值权重
w1 = (1 - tx) * (1 - ty);
w2 = tx * (1 - ty);
w3 = (1 - tx) * ty ;
w4 = tx * ty ;
% 计算插值像素值
N = w1*d_image(fy:fy+dy,fx:fx+dx) + w2*d_image(fy:fy+dy,cx:cx+dx) + ...
w3*d_image(cy:cy+dy,fx:fx+dx) + w4*d_image(cy:cy+dy,cx:cx+dx);
D = N >= d_C;
end
v = 2^(i-1);
result = result + v*D;
lbpimage=result;
end
作者: linhao888888 发布时间: 2011-12-24
你这分明是matlab代码啊
作者: libralibra 发布时间: 2011-12-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28