1 简介

基于计算机视觉实现红外图像的人体特征信息检测Matlab源码

2 完整代码

clc;
[filename,pathname]=uigetfile({'*.jpg'},'choose the picture');
str=[pathname, filename];
m=imread(str);
Input_Image=m(3:end-3,3:end-3);
[h, g]=imhist(Input_Image); % h 为像素个数,g 为灰度级
ff=double(Input_Image);
%/////////选择感兴趣区域具体程序段///////////////////
[M, N]=size(Input_Image);
%%%%%%%%%%%%%%%%%%%%%%%%%%//输入300,得到初始阈值tg
tg=1;
for a=1:255
if (h(a)>300)&&(h(a+1)<300)
if tg<a
tg=a;
end
end
end
%%%%%%%%%%%%%%%%%%%%//查找[tg,tg+10]之间的最小值,确定阈值tg
sign=1000;
for a=tg:tg+10
if h(a)<sign
sign=h(a);
tg=a;
end
end
%根据所确定的全局阈值将原图像变成二值图像
X=zeros(M,N);
for i=1:M
for j=1:N
if Input_Image(i,j)>=tg
X(i,j)=1;
else
X(i,j)=0;
end
end
end
X=X~=0;
%标记连接成分(8邻域)
[LX ,XNum]=bwlabeln(X,8);
size(LX);
%以伪彩色的形式显示标记图像
RGBX=label2rgb(LX,@jet,'k');
%/////////////////////////////////////////////////////////////////
%寻找最大区域作为参考区域
[r1,c1]=find(LX==1);
[a,b]=size(r1);
MaxRegion=a;
Max_Region_flag=1;
Max_Region_r=r1;
Max_Region_c=c1;
for i=2:XNum
[r,c] = find(LX == i);
[a,b]=size(r);
if a>MaxRegion
MaxRegion=a;
Max_Region_flag=i;
Max_Region_r=r;
Max_Region_c=c;
end
end
%确定参考区域的四个顶点坐标
rmin=min(min(Max_Region_r));
rmax=max(max(Max_Region_r));
cmin=min(min(Max_Region_c));
cmax=max(max(Max_Region_c));
%确定参考区域的行数和列数
Ref_row=rmax-rmin+1;
Ref_column=cmax-cmin+1;
%将参考区域图像赋给一个新的图像矩阵Ref_Image
Ref_Image=zeros(M,N);
for i=1:M
for j=1:N
if(i>rmin &&i<rmax &&j>cmin &&j<cmax)
Ref_Image(i,j)=Input_Image(i,j);
else
Ref_Image(i,j)=0;
end
end
end
%确定参考区域的宽和高
Ref_Height=rmax-rmin+1;
Ref_Width=cmax-cmin+1;
%确定感兴趣区域的宽和高以及四个顶点的坐标
ROI_Height=0.7*Ref_Height;
ROI_Width=0.3*Ref_Width;
ROIminr=rmin-ROI_Height;
ROImaxr=rmax+ROI_Height;
ROIminc=cmin-ROI_Width;
ROImaxc=cmax+ROI_Width;
%转换为整数
ROImaxr=round(ROImaxr);
ROIminr=round(ROIminr);
ROImaxc=round(ROImaxc);
ROIminc=round(ROIminc);
%处理边界问题
if ROIminr<0
ROIminr=1;
end
if ROImaxr>M
ROImaxr=M;
end
if ROIminc<0
ROIminc=1;
end
if ROImaxc>N
ROImaxc=N;
end
%将感兴趣区域图像赋给一个新的图像矩阵ROI_Image
ROI_Image=zeros(M,N);
for i=1:M
for j=1:N
if(i>ROIminr&&i<ROImaxr&&j>ROIminc&&j<ROImaxc)
ROI_Image(i,j)=Input_Image(i,j);
else
ROI_Image(i,j)=0;
end
end
end
%显示感兴趣区域图像
ww=uint8(ROI_Image);
x=mean2(ww);
fx1=8.5094e-06*x^3-0.0022*x^2+0.1726*x+1.4361;
fx2=5.0918e-07*x^4-1.9187e-04*x^3+0.0241*x^2-1.1363*x+91.6610;
fx3=-2.01e-5*x^3 + 0.00838*x^2-0.924*x+102.0;
fx4=1.08e-4*x^3-0.024*x^2+1.45*x+108.0;
fx5=0.2185*sin(1.44*x-4.866)+0.3676*sin(2.801*x-19.42)+0.2096*sin(2.38*x-12.42)+0.1813*sin(4.144*x+28.31)+0.3283*sin(2.472*x-7.916)+0.386*sin(1.977*x+4.266)+0.2477*sin(3.806*x+23.12)+0.1104*sin(0.739*x+8.16)+36.5;
gx1='mmol/L';
gx2='次/min';
gx3='mmHg';
gx4='度';
fprintf('你的血糖是%6.2f',fx1);
fprintf('%s ',gx1);
if fx1>6
a='你的血糖偏高';
elseif (4<fx1)&&fx1<6
a='你的血糖正常';
else
a='你的血糖偏低';
end
fprintf('%s\n',a);
fprintf('你的心率是%5.0f',fx2);
fprintf('%s\n',gx2);
fprintf('你的血压是%6.0f-',fx3)
fprintf('%6.0f',fx4);
fprintf('%s\n',gx3);
fprintf('你的体温是%6.1f',fx5);
fprintf('%s\n',gx4);

3 仿真结果

【图像检测】基于计算机视觉实现红外图像的人体特征信息检测Matlab源码_红外

4 参考文献

[1]单巍等. "基于深度卷积神经网络的红外图像行人检测." 激光与红外 50.5(2020):7.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【图像检测】基于计算机视觉实现红外图像的人体特征信息检测Matlab源码_二值图像_02