⛄一、口罩识别简介

口罩规范佩戴识别是基于人脸口罩检测结果进行的,该部分的输入是人脸口罩检测的输出且是有佩戴口罩的人脸。首先,将人脸部分的图像提取出来;然后映射到YCrCb颜色空间并进行非线性变换,经过椭圆肤色模型检测后输出一张灰度图,其中皮肤部分像素点为255(白色),非皮肤部分像素点为0(黑色);最后再通过遍历人脸中鼻和嘴周围的像素点,得到皮肤暴露状况,从而判断是否规范佩戴口罩了。识别模型结构如图3所示。本节具体介绍了YCrCb椭圆肤色模型、人脸中鼻和嘴部分的划分、以及通过肤色状况判断是否规范佩戴口罩的逻辑关系。

图3 口罩规范佩戴识别模型框架

1 YCrCb椭圆肤色模型
YCrCb椭圆肤色模型[11]是Hsu等人所提出的,它能够很好地利用皮肤在YCrCb颜色空间聚类的特点进行皮肤检测,并且降低光线亮度对检测的影响。构建该模型,首先需要将肤色检测的图片从RGB颜色空间转换到YCrCb颜色空间,具体转换公式如下:

得到了原始图片在YCrCb颜色空间的映射之后,还需要对其中Cr和Cb色度进行一系列非线性变换,得到Cr′和Cb′,即得到新的YCr′Cb′颜色空间。与此同时,还要去掉高光阴影部分,采用四个边界限制肤色聚类区域,以此适应原始图片中亮度过明或过暗的区域。皮肤信息在YCr′Cb′颜色空间中会产生聚类现象,其分布近似为一个椭圆形状,如图4所示。

图4 椭圆肤色模型
该椭圆区域即为椭圆肤色模型,其计算公式如公式(2)所示,x、y的取值如公式(3)所示。

对于皮肤的检测,只需要求出原始图片中某个像素点在YCr′Cb′颜色空间中的映射Cr′和Cb′,然后根据公式(3)求出对应坐标(x,y),再依据公式(2)判断该点是否落在该椭圆区域内即可。如果是,则该像素点判断为皮肤,否则判断为非皮肤。

2 人脸区域划分及识别判断
一般来说,人们佩戴口罩不规范的情况可能是将鼻子露出,或是嘴巴露出,或是鼻子嘴巴都露出。所以,识别一张佩戴有口罩的人脸是否将口罩佩戴规范了,可以通过检测其鼻子周围和嘴巴周围的皮肤情况,来判断这些部位是否暴露在外面。要完成该过程,就涉及到鼻子和嘴巴部分的区域划分。经过大量观察并测量人脸口罩检测结果的检测框发现,人脸中,鼻子周围部分所在位置大约在47%~67%的高度,嘴巴周围部分所在位置大约在67%~95%的高度。这两部分的宽度与检测框的宽度相同。如图5(a)所示。

图5 鼻、嘴区域划分及肤色检测效果
其中

nose_ymin、nose_ymax分别表示Nose part框的最小纵坐标和最大纵坐标。mouse_ymin、mouse_ymax分别表示Mouse part框的最小纵坐标和最大纵坐标。width、height分别表示整个人脸图像的宽度和高度。

将人脸口罩检测框部分的图片经过YCrCb椭圆肤色模型处理后,得到一张对应的灰度图,如图5(b)所示。检测为皮肤的像素点设为255(白色),检测为非皮肤的像素点设为0(黑色)。在该灰度图上,遍历鼻和嘴周围部分的所有像素点,得出在对应部分范围里皮肤所占的面积百分比。经过反复的实验测试发现鼻子部分阈值设置为30%,嘴巴部分阈值设置为25%时合理性最高。在进行口罩佩戴规范情况识别时,如果鼻子和嘴巴部分皮肤所占百分比超过对应的阈值,就说明该部分暴露在外面,再基于下面的命题逻辑表达式进行整体判定。

其中,P表示佩戴口罩,Q表示鼻子暴露在外面,R表示嘴巴暴露在外面。由于该识别是在已佩戴口罩人脸的基础上,所以P一直为true。当表达式(7)真值为true时,识别结果为口罩未规范佩戴;真值为false时,识别结果为口罩已规范佩戴。

⛄二、部分源代码

function varargout = UI(varargin)
% UI MATLAB code for UI.fig
% UI, by itself, creates a new UI or raises the existing
% singleton*.
%
% H = UI returns the handle to a new UI or the handle to
% the existing singleton*.
%
% UI(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in UI.M with the given input arguments.
%
% UI(‘Property’,‘Value’,…) creates a new UI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before UI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to UI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help UI

% Last Modified by GUIDE v2.5 30-Mar-2022 21:14:15

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @UI_OpeningFcn, …
‘gui_OutputFcn’, @UI_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% global image
% — Executes just before UI is made visible.
function UI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to UI (see VARARGIN)

% Choose default command line output for UI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes UI wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = UI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

clear all

% — Executes on button press in read_image.
function read_image_Callback(hObject, eventdata, handles)
% hObject handle to read_image (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image;
axes(handles.axes1); %获取句柄
[fname,pname] = uigetfile({‘.jpg’;'.jpeg’;‘.bmp’;'.png’},‘选择图片’);
file=[pname fname];
image=imread(file);
%image(img_src);
imshow(image)
title(‘测试图像’);
handles.img=image;
guidata(hObject,handles);
whos(‘image’);

⛄三、运行结果

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]肖俊杰.基于YOLOv3和YCrCb的人脸口罩检测与规范佩戴识别[J].软件. 2020,41(07)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【口罩识别】基于matlab GUI RGB滤波+YCbCr+肤色标定口罩识别【含Matlab源码 1895期】相关推荐

  1. 【数字信号调制】基于matlab GUI PCM编码和QAM调制系统【含Matlab源码 2080期】

    ⛄一.PCM编码+QAM调制简介 1 PCM 数字信号是对连续变化的模拟信号进行抽样.量化和编码产生的,称为PCM(Pulse Code Modulation),即脉冲编码调制. 脉冲编码调制就是把一 ...

  2. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

    ⛄一.背景差分法和帧间差分法的车辆运动目标检测简介 1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断.航天航 ...

  3. 【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】

    一.区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解. 1 高斯金字塔分解 记源图像为G0,G ...

  4. 【图像加密】基于matlab GUI正交拉丁方置乱+混沌图像加密解密【含Matlab源码 636期】

    ⛄一.正交拉丁方置乱及混沌系统简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术 ...

  5. 【图像加密】基于matlab GUI正交拉丁方置乱算法图像加解密【含Matlab源码 182期】

    ⛄一.正交拉丁方置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术和图像加密 ...

  6. 【图像加密】基于matlab GUI Logistic混沌图像加密与解密【含Matlab源码 1216期】

    ⛄一.混沌图像加密与解密简介 混沌系统图像加密解密理论部分参考链接: 基于混沌系统的图像加密算法设计与应用 ⛄二.部分源代码 %加密程序 function b=jiami(a,s,h) [m1,n1] ...

  7. 基于java开发的健身器材电商管理系统.rar(含项目源码前后端项目)

    功能:健身器材信息管理.健身器材分类管理.公告管理.个人中心.订单管理.健身器材入库管理.健身器材出库管理.收获评价管理.系统管理等 前端页面展示 后端管理: 源码下载地址:>>>

  8. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  9. 【芯片识别】基于matlab GUI形态学PCB板芯片识别【含Matlab源码 1820期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[芯片识别]基于matlab GUI形态学 PCB板芯片识别[含Matlab源码 1820期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

最新文章

  1. python编程软件开发_Python编程对软件开发人员很重要?
  2. resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...
  3. Teams数据统计 - 聊天消息
  4. 一个sql生成hive日期维度表
  5. 200t不稳定_技术革新!将不可能变为可能 这家企业是怎么做到的?
  6. 为什么python提示没有clock_python – 为什么time.clock比time.time给出更长的时间?
  7. linux如何看分配固定共享内存段,Linux共享内存的查看和删除
  8. 字节跳动一面:如何从 100 亿 URL 中找出相同的 URL?
  9. java操作字节码_操作Java字节码
  10. ExtJS应用架构设计(二)
  11. 学习在Unity中制作基础的节点编辑器
  12. spark实现 通过ratings.dat和movies.dat两个文件得到平均得分超过4.0的电影列表
  13. 论文精读及分析:Fully Convolutional Networks for Semantic Segmentation
  14. Spring Cloud微服务简介
  15. 《每日一题》——146. LRU 缓存|460. LFU 缓存
  16. 1.6.4- 四大名著案例
  17. 开源全平台版知识付费系统源码 支持微信小程序+公众号+H5+PC端
  18. 斐波那契数列的背景及解决方法
  19. DFS(深搜)算法解析
  20. CIDR地址规划方法

热门文章

  1. linux 红帽双机配置,Redhat Linux安装keepalived实现双机热备
  2. vue实现打印的方法(自动分页)
  3. 使用C#编写一个求解数独的小软件
  4. 那是计算机房吗英语否定回答,2019-2020学年pep人教版四年级英语下册全册单元知识点归纳与整理...
  5. 论文查重会查图表吗?
  6. STC15W单片机蓝牙APP语音识别智能家居系统风扇灯空调窗帘温度湿度入侵检测
  7. c4d python_C4D python 创建物体修改属性
  8. Revit拼接线、放置视图参照
  9. (41)Verilog HDL D触发器设计
  10. docker文件清理 <none>