【竞赛01-b】【论文】济南大学第七届数学建模比赛A题论文详解

笔者在18年五月底参加了济南大学第七届数学建模校赛,现在将论文贴出,在博文中,将整理出论文中核心的详细知识点

基于 MATLAB 的数字图像处理模型

1 摘要

本文利用 MATLAB 等工具对题目给出图像进行数字化处理,通过均值法,权 值法,梯度值求解轮廓法,插值法,自动定位人脸等多种不同的方法实现了对问 题一到五的计算机求解和数学模型建立。

  • 对于问题一,将人脸部分的像素点三维矩阵分为若干个小矩阵,对每个小矩 阵内的所有像素点赋予相同的 RGB值,即可得到马赛克效果。为了对比效果,分 别使用了均值法,左上角值法,随机值法进行处理,又对小矩阵大小分别设置为3×3、4×4、5×5。最终得到小矩阵大小为 4×4 时的均值法得到的马赛克效果 最好,最能够符合题目要求。

  • 对于问题二,根据计算机对于灰度处理的基本步骤,主要工作为将像素点的 R、G、B值置为一相等值,对于原图,分别使用加权平均法、平均值法、最大值 法求出了对应灰度值,最终确定加权平均法所得灰度图效果最为适宜。

  • 对于问题三,为简化提取轮廓线过程,首先将 RGB 图像转化为灰度图。然后 使用 sobel 算子以及 prewitt算子对图像进行卷积,得到的梯度值矩阵经过归一 化处理以及灰度化处理,得到基本轮廓图。为使图片轮廓效果更好,通过灰度转置以及直方图均衡化操作,得到最终效果图。

  • 对于问题四,要放大图片,即要对各像素点的 RGB 值进行分层插值处理,对
    图片分别采取双线插值法和最邻近插值法进行放大操作,对比得到双线插值法放 大的图像更加清晰。

  • 对于问题五,通过对于装饰图的二值化处理,得到装饰图的前景与后景的分 离效果。对于图像的合成,采用了像素点 RGB
    值替换的做法,将装饰图中呈现为 黑色的部分定位坐标,再将原彩色图的对应像素替换人物图片中的指定像素点。
    而在定位替换点的时候,通过手动测量和识别人脸自动定位两种方法进行定位, 得出两个符合题意的合成图片。

关键词:图像矩阵 算子 均值 权值 二值化 灰度化 定位 插值

2 具体过程

(1)问题一:马赛克的处理
  • 首先,我们需要知道一般图像处理中,对图像进行读取以及后续处理的原理,这也是整个建模过程的基础:
    对于图像来说,图像是成千上万个像素点构成,每一个像素点,具有三个维度的信息,我们称之为RGB色彩值,RGB的意思就是三原色,红色red,绿色green,蓝色blue,这三原色可以构成我们平常所看到的颜色。它们的取值是(0,255)
    因此,我们可以通过matlab的指令 imread 命令,将一个图片,转换成一个三维矩阵。
  • 现在我们可以了解马赛克的原理:马赛克的原理有许多种,本文参考的是文献【1】提供的均值处理方法,简单来说,就是将需要处理的图像区域分成若干个小像素块,假设任意的一个小像素区域为A,然后对于A来说,我们对这个区域的像素RGB色彩值取均值,然后重新赋值此区域。便可以得到一个“中和”过的色彩值。(这部分RGB是分为三层处理,也就是说red层处理一次,green一次,blue一次)
  • 在论文中,我们根据分块的不同尺寸进行了操作,效果如图:
    在这里插入图片描述
    可以看到,若是区域区的越大,那么图像就越模糊,因为题目要求能够模糊五官但是能够观察到人脸,我们认为像素区域取4*4的时候效果是比较好的。
  • 为了马赛克效果的多样性,我们添加了不同于对新的区域的赋值方法,分别是:取左上角的色彩值为整体的方法和随机取色彩值作为新的整体色彩值,效果如下
    在这里插入图片描述
    效果稍微有些区别,可以看出其实有一些像我们平常使用p图软件的不同马赛克笔。
第一题小结:事实上,马赛克的原理非常的简单,只需要打乱原先的像素区域即可,博主认为对新的区域的赋值方法对马赛克的效果影响不是很大,但选择的尺寸会比较显著的影响其效果。

(2)问题二:彩图转化为灰度图
  • 首先,在做题之前,我们应该需要搞清楚题目中的概念,灰度图是什么?
  • 我们可以认为,灰度图是彩图在灰度值之间的一个映射,常用的转换方法有以下几种:假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
    1.浮点算法:Gray=R0.3+G0.59+B0.11
    2.整数方法:Gray=(R
    30+G59+B11)/100
    3.移位方法:Gray =(R76+G151+B*28)>>8;
    4.平均值法:Gray=(R+G+B)/3;
    5.仅取绿色:Gray=G;

    通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了
  • 我们可以观察到,灰度图的三维都是相同的
  • 在建立模型时,我们采用了三种方法,分别是浮点算法(权值平均法),均值法,以及最大值法(未在上述方法中列出),处理后,通过matlab的imshow命令,效果如下:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

通过对比,可以看到通过权值平均法得到的效果比较好。


(3)问题三:轮廓提取

  • 题目要求是线描图,其实转成图像处理的问题,就是对于整个图片的轮廓提取。

  • 那么如何实现轮廓提取?事实上,现在已经有非常成熟的解决方法。一般来说,轮廓提取问题可以粗略的描述为找到图像中那些沿特定方向局部强度变化显著的位置(这里如果不好理解的话,我们可以认为一般在图像中,一个物体与背景,或者人与背景,颜色是有很大的不同的),提取轮廓就是保留这些边缘。在图像中我们的首要任务就是区分出相同变化梯度和不同变化梯度的区域(相同或者相近的变化梯度的地方可以认为是一个不需要分割区域)。

  • 由于 RGB 图是一个三维图像,在处理的时候会比较复杂,因此先通 过第二问的求解方法来将 RGB 的空间图像转换为灰度图像

  • 而对于图像中的梯度,我们有很好的工具去描述,即图像中某一横切面所对 应的偏导数构成的向量,称为梯度向量
    ∇ f = ( ∂ f ∂ x , ∂ f ∂ y )   ∣ ∣ ∇ f ∣ ∣ = ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 \nabla f=(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y})\\ \ \\ ||\nabla f||=\sqrt{(\frac{\partial f}{\partial x})^{2}+(\frac{\partial f}{\partial y})^{2}} f=(xf,yf) f=(xf)2+(yf)2

  • 为了求得每一点的梯度值,引入 sobel 算子,利用算子对图像 进行卷积操作。(以下图片部分来自本人的比赛论文)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  • 图片的轮廓提取是个非常复杂的问题,如果想要比较好的效果,需要比较繁复的处理,博主本人也只是参考了常用的轮廓提取的方法,用了最简单的梯度向量的处理方法和后续的灰度均衡化的方法,主要的参考来源来自于文献【2】【3】,如果大家对于图像处理的细节有进一步的需求,可以再参考两本文献

轮廓提取小结:对于轮廓提取,我们的基本思路就是根据梯度的变化来获取边缘的位置,实现的方法是通过matlab中的边缘获取算法,基本原理是图像处理中的轮廓提取算法。可以认为基本步骤是(1)彩图灰度化 (2)边缘提取-梯度值映射为灰度值 (3)灰度值转换 (4)若灰度值集中,可做均衡化处理来增加效果

(4)问题四:图片的放大
  • 对于图像 n 倍放大,我们可以简单的认为图像的放大即为新建一个图像, 拥有原图像的 n 倍像素点数量,且每个像素点的 RGB 值都与原图中的某一对应像 素点的 RGB 产生联系(或者说:新图像的每一点,都是来自于原来的图像)。由此可以想到利用插值来得到放大图像中某一像素点所对 应的 RGB 值
  • 在具体的处理中,我们使用了双线插值法以及最邻近插值法
  • 事实上,最邻近插值法的效果经实验并不好,因为会造成严重的图像失真。在论文中,主要用于对比。
  • 图片的缩放最核心的问题就是:放大/缩小后的图片的像素点是通过何种方法来自于原来的图片中的像素点。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

(5)问题五:图片的分离与合成,图像定位(人脸识别)
  • 在这一个问题中,实际上是分成两个部分的,第一个部分是需要将装饰物从本身的图片中分离出来,因为装饰物在一个白色背景图中,我们在合成的时候,只是需要装饰物本身,而不需要白色背景,因为我们的思路是,先将装饰物的彩图转化为二值图。然后通过二值图的0,1分布,装饰物所在的区域的位置,我们可以记录下来。
  • 这个分离的问题我们可以理解为为自己戴上一副红外装置,整个世界都分成了两种,一种是0,一种是1,为0的像素点的位置,我们可以记录下来,这一点的像素值,是我们所需要的装饰物的像素值
  • 第二个问题,可以简单的认为是我们需要定位在图中的人脸的位置,定位后,将装饰物放置于头顶(放置问题就是图片的合成,可以使用装饰物的像素替换头顶上方区域的像素)
a.图片的分离与合成

在这里插入图片描述

b.定位(人脸识别)
  • 主要参考的依据是YCbCr 肤色模型,可以通过肤色的亮度与周围环境的亮度来简单区分肤色与背景。
    在这里插入图片描述
  • 但是,这样还是有问题,对于亮度和人脸的肤色差不多,以及手的区域,还是不能够很好的与人脸区分开来。因此我们需要加入一些别的标准来判断一个区域是否是人脸:一个白色区域到底是不是人脸,我们可以通过加入长高比(人脸是不可能达到一个非常极端的比值,以及在图片中的像素区域的大小等判别标准)
    在这里插入图片描述
    在这里插入图片描述
    接下来用像素替换即可
    在这里插入图片描述

第五问小结:主要把一个大的问题分成两个部分,一是如何将装饰物从带有背景的的图片中分离出来,或者说定位出来(本文用的是标识定位装饰物,然后在需要添加的地方进行像素的替换)。二是如何定位人脸的区域。解决了这两个问题,也就解决了题给的问题。

参考文献

[1] 马赛克原理,HTTPS://WWW.ZHIHU.COM/QUESTION/31985844,2018,5,11
[2] 顾梅花,苏彬彬,王苗苗,王志磊, 彩色图像灰度化算法综述 , 《计算机 应用研究》, 第 36 卷第 5 期,2018 [4] 冈萨雷斯·C·拉斐尔, 伍兹·E·理查德,数字图像处理 [M],阮秋琦, 阮 宇智, 等译. 3 版. 北京: 电子工业出版社, 2011: 151-152
[3] [德] 伯格,[德] 伯奇 著,黄华 等 译,数字图像处理:JAVA 语言算法描 述,清华大学出版社,2011,99-103
[4] 徐 烨 超 , 双 线 性 插 值 (BILINEAR INTERPOLATION) 原 理 及 使 用 , HTTPS://BLOG.CSDN.NET/HUANG1024RUI/ARTICLE/DETAILS/46545329,2018.5.12
[5] 贺兴华,周媛媛,王继阳,周晖等 MATLAB7.X 图像处理 人民邮电出版社 46-48
[6] BLUE_LG , 简 单 的 基 于 YCRCB 颜 色 空 间 的 人 脸 检 测 ( 肤 色 ), HTTPS://WWW.CNBLOGS.COM/BLUE-LG/ARCHIVE/2011/12/07/2279879.HTML

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值