深度好文!人眼中心定位(基于ACCURATE EYE CENTRE LOCALISATION BY MEANS OF GRADIENTS),含matlab实现










MeanOfWeightedSquaredDotProducts.M 脚本下载地址:
(https://download.csdn.net/download/ephemeroptera/11003123)
附上实现代码:

%% (1)get eye image
man = im2double(rgb2gray(imread('man.jpg')));
faceDetector = vision.CascadeObjectDetector('FrontalFaceCART');
LeftEyeDetector = vision.CascadeObjectDetector('ClassificationModel','LeftEyeCART','UseROI',true);
facebbox = faceDetector(man);
leftEyebbox = LeftEyeDetector(man,facebbox(1,:));
leftEye = imcrop(man,leftEyebbox(1,:));
figure(1),imshow(leftEye)

%% gaussian and invert
faceEdge = max(facebbox(1,3:4));
sigma = 0.005*faceEdge;
temp = fspecial('gaussian',[5,5],sigma);
leftEye2 = imfilter(leftEye,temp,'symmetric','corr');
Wc = 1 - leftEye2;

%% get eye image gradient
[px,py] = gradient(leftEye);
grad = abs(px)+abs(py);
% ignore smooth area
T = 0.3*std(grad(:))+mean(grad(:));
grad(grad<T) = 0;

%% in order to calculate each dot products with vector d and vector g ,we build a struct M
[x,y]= meshgrid(1:size(leftEye,1),1:size(leftEye,2));
M = cat(3,grad,x,y,px,py);

%% calculate each respond of c
C = zeros(size(leftEye));
for i = 1: size(leftEye,1)
    for j = 1: size(leftEye,2)
       C(i,j) = MeanOfWeightedSquaredDotProducts(M,Wc,i,j);
    end
end

%% post-processing
% remove extrem high values
%  C(C>0.9*max(C(:)))=0;
% remove border velues
C(1,:)=0;
C(end,:)=0;
C(:,1)=0;
C(:,end)=0;

%% get location of the maximum value as centre
MaxValue = max(C(:));
[centreY,centreX] = find(C==MaxValue);

%% show centre
eyeCentre = insertMarker(leftEye,[centreX,centreY]);
figure(2),imshow(eyeCentre);

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
实现一个基于TIMS320C55x芯片的900Hz陷波滤波器,可以按照以下步骤进行: 1. 确定陷波滤波器的类型和参数。对于900Hz陷波滤波器,可以选择二阶带阻陷波器,并设置截止频率为900Hz,Q值为10。 2. 使用C55x Cycle Accurate simulator进行仿真。在仿真中,需要编写程序实现陷波滤波器的功能。可以使用MATLAB或C语言编写程序。 3. 编写程序实现陷波滤波器的功能。以下是一个示例程序: ```c #include "stdio.h" #include "stdlib.h" #include "math.h" #define PI 3.1415926535897932384626433832795 #define N 2 // 二阶陷波滤波器 float a[N+1] = {1.0, -1.9989, 0.9990}; // 陷波滤波器系数a float b[N+1] = {0.9995, -1.9989, 0.9995}; // 陷波滤波器系数b float x[N+1] = {0.0}; // 输入信号缓存 float y[N+1] = {0.0}; // 输出信号缓存 float process_sample(float sample) { float result = 0.0; int i; // 将新采样值存入输入信号缓存中 for (i = N; i > 0; i--) { x[i] = x[i-1]; } x[0] = sample; // 计算输出信号 for (i = N; i >= 0; i--) { result += b[i] * x[i]; if (i > 0) { result -= a[i] * y[i-1]; } } // 将新输出值存入输出信号缓存中 for (i = N; i > 0; i--) { y[i] = y[i-1]; } y[0] = result; return result; } int main() { // 生成测试信号,以900Hz为周期 float signal[1000] = {0.0}; int i; for (i = 0; i < 1000; i++) { signal[i] = sin(2*PI*900*i/48000); } // 对测试信号进行陷波滤波 for (i = 0; i < 1000; i++) { signal[i] = process_sample(signal[i]); } // 输出滤波后的信号 for (i = 0; i < 1000; i++) { printf("%f\n", signal[i]); } return 0; } ``` 在上述程序中,使用了二阶带阻陷波器的系数,并使用了输入信号缓存和输出信号缓存来实现滤波器的功能。程序通过计算输入信号和滤波器系数的乘积,并将结果累加到输出信号缓存中,最后输出输出信号缓存中的第一个值作为滤波器的输出。程序生成了一个900Hz的正弦信号作为输入信号,并输出了滤波后的信号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值