概述
下面这个程序是haar-like特征提取-->haar-like关键点显示-->haar-like特征人脸检测代码,该段代码在运行时出现了如图片所示的bug,本人看不懂这个bug出错的根源:(各行代码已有注释,出错的那一行代码已经用黄色底纹标出,本段程序逻辑上的因果是连续的,不能只截取某一行或某几行代码作问题分析,所以提出的代码段有些长,敬请谅解)
function locs = Untitled3(imageFile)
% 判断参数
if nargin < 1
% 默认参数
imageFile = fullfile(pwd, 'C:UsersLenovoDesktop目标训练样本1.jpg');
end
% 读取图像
I = imread('C:UsersLenovoDesktop目标训练样本1.jpg');
% 灰度处理
if ndims(I) == 3
I = im2double(rgb2gray(I));
else
I = im2double(I);
end
% 命令构建
command='E:33573 程序与数据程序与数据(17日更新)fig13-基于HaarLike的人脸检测HaarLike.exe';
command = sprintf('%s %s', command, imageFile);
% 执行
eval(command);
% 获取结果数据
loc = load('E:33573 程序与数据程序与数据(17日更新)fig13-基于HaarLike的人脸检测tmp.key');
% 高斯平滑
g1 = fspecial('gaussian', 7, 1);
gray_image = imfilter(I, g1);
% 空间滤波
h = fspecial('sobel');
Ix = imfilter(gray_image,h,'replicate','same');
Iy = imfilter(gray_image,h','replicate','same');
% 参数配置
sigma = 2;
thd = 0.05;
r = 2;
% 高斯滤波
g = fspecial('gaussian',fix(6*sigma), sigma);
Ix2 = imfilter(Ix.^2, g, 'same').*(sigma^2);
Iy2 = imfilter(Iy.^2, g, 'same').*(sigma^2);
Ixy = imfilter(Ix.*Iy, g, 'same').*(sigma^2);
% 计算haar特征域
R = (Ix2.*Iy2 - Ixy.^2)./(Ix2 + Iy2 + eps);
d = 2*r+1;
% 提取特征点
localmax = ordfilt2(R,d^2,true(d));
R = R.*(and(R==localmax, R>thd));
% 去除四周噪声点
R([1:r, end-r:end], :) = 0;
R(:,[1:r,end-r:end]) = 0;
% 提取有效特征点
[xp,yp,~] = find(R);
% 存储并返回
locs{1} = loc;
locs{2} = [yp, xp];
% 显示关键点
function disp_haar_like_feature(image, locs)
% 显示窗口
figure('Position', [50 50 size(image,2) size(image,1)]);
% 色彩类型
colormap('gray');
% 显示
imagesc(image);
hold on;
% 角度变量
t = linspace(0, 2*pi);
for i = 1: size(locs{1},1)
% 生成位置x
xt = locs{1}(1) + locs{1}(3)*cos(t);
% 生成位置y
yt = locs{1}(2) + locs{1}(3)*sin(t);
% 显示
plot(xt, yt, 'r:', 'LineWidth', 2);
end
% 绘制特征点
plot(locs{2}(:,1), locs{2}(:,2), 'r*');
hold off;
clc; clear all; close all;
% 选择图像
imageFile = fullfile(pwd, 'C:UsersLenovoDesktop目标训练样本1.jpg');
image_origin = imread(imageFile);
% haar_like算子
loc = get_haar_like_feature(imageFile);
% 显示关键点
disp_haar_like_feature(image_origin, loc);
最后
以上就是斯文小馒头为你收集整理的matlab eval 不显示,matlab中 eval(command); 运算符无效的问题的全部内容,希望文章能够帮你解决matlab eval 不显示,matlab中 eval(command); 运算符无效的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复