1.1  图像预处理算法简介

1.1.1  数字图像表示

我们可以通过这样理解数字图像,首先图像是由许多像素组成的,所以说图像处理是在二维平面上对图片的每一个像素进行处理,而如何知道我们处理的是这一个像素,而不是另外一个像素,如何定义一个图像的最基本的元素。要知道,在二维图像上,每一个像素的空间坐标是固定的,所以说我们就能把图像处理转化到一个坐标系上,转化为对像素进行处理,这一个量化的坐标系与常规的平面直角坐标系并不相同,我们主要使用两种方法表示取样得到的一幅M行,N列的图像,如图2.1和图2.2两种表示方法。

一幅图像可以定义为一个二维函数f(x,y), f表示在点(x,y)处的振幅表示图像在该点的亮度。图像x和y以及振幅连续,通过取样和量化何以得到数字图像。

图2.1 第一种表示                                                                      图2.2 第二种表示

彩色图象的表示远比灰度图复杂,可以用红、绿、蓝三元组的二维矩阵来表示。

灰度图

一幅灰度图像就是一个数据矩阵,矩阵的值表示灰度的浓淡。其每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位(uint8)的非线性尺度来保存,这样可以有256级灰度(如果用16(uint16)位,则有65536级)

二值图

二值图简而言之就是其灰度等级只有0和1两个值,通常是通过灰度图通过阈值分割等灰度变换得到的,得到二值图的过程对于图像处理具有很大的意义。而且最重要的是其不是0就是1,数据量比0-255这256个等级小的多,仅仅需要1bit即可存储,十分方便。通常对于二值图像的处理都是针对其高亮部分即灰度值为1的那部分像素,而且二值图可以很方便的进行与或非等逻辑运算,人们通常用黑白,B&W,单色图来表示二值图像。

1.1.2  直方图直方图均衡

空间域处理表示对单个像素或者领域进行灰度变换(本文只讨论针对灰度图的预处理)。

直方图是一种能够直观得到一张图象的灰度范围和灰度分布,其横轴为图像中出现过的灰度值,纵轴为某灰度值出现的次数或者出现的频率。程序中比较简单的得到灰度直方图的方法是通过二中循环遍历其每一个灰度值。通过一个256大小的int数组即可存储0-255灰度出现的频率。通过灰度直方图,可以很清楚的看出图像的明暗程度,如若大部分像素点都在靠近y轴位置,则从整体表现出较暗的特征,也可以很容易的从图中看出某个高亮部分。

对于得到的直方图,若是灰度变化太小,比如如果图像较暗的话说明灰度集中分布在较低灰度,直方图均衡化就是将某一个灰度映射到0-1中某一个连续量,并且一幅图像的灰度范围映射可以覆盖0-1的每一个值,直方图均衡化的结果并不能生成完全平坦的直方图,只是可以增大灰度变化范围,增强对比度,变换结果如图1.3所示。

图1.3 直方图均衡化

1.1.3  图像滤波

人类通过视觉来获取图像信息,但是在接受信息的过程中,某些东西会阻碍我们的双眼获得正确的信息,至少我们可以需要睁大双眼仔细观察来排除这种干扰,这种就是噪声,某些图像在获取之初质量便不高,很难进行下一步的处理或者下一步处理后无法得到正确的特征,为了消除这种干扰,把噪声和我们需要提取的目标分离,我们一般去除或者抑制图片的高频成分,保留低频成分,本小节将介绍图像滤波中的均值滤波和中值滤波。工程实际对于滤波处理也有要求:使图像清晰饱满,直观效果好的同时还要求不能破坏边缘的重要信息。

中值滤波

中值,顾名思义是在一组数如{3,2,1,7,4,5,6}以中值4代替7的位置,可以有效的降低最大值和最小值的影响。在图像处理中也是如此,通过对一个领域内的像素灰度进行排序(如图2.2所示),然后用中值替代该点的灰度值。中值滤波的效果主要取决于两个因素:一是选取的领域形状涉及到的空间范围,常见的有圆,圆环,十字,以及矩形。二是涉及到的空间像素点。中值滤波有很好的消除椒盐噪声的效果,也能较好的保存图片边缘信息(常用的边界处理有补0和补最近像素值)。

图1.4  3×3中值滤波矩形模板

均值滤波

均值滤波与中值滤波的区别就是采用一个领域内的平均值去代替领域内某点的灰度值。均值滤波可以过滤掉与选用的领域敏感的像素点,敏感是指该点的灰度值与领域内的灰度值相差过大,可以用来去除某些分布的噪声(如高斯分布)。这样处理的结果就是去除噪点的同时也会模糊一些图像的像素点,造成模糊的图像,采用的领域越大,造成的模糊越明显。均值分为算术均值,几何均值,加权均值,均值滤波针对灰度计算的方法也有所不同,还有一些不常见的谐波滤波器、逆谐波滤波器等。本文中采用了opencv中的blur函数来实现均值滤波。其实现方法为算术均值:某点像素为f(x,y),采用m×n的矩形滤波模板,其中一种算术均值滤波器的计算方法见公式(2.1):

fx,y=1mn(x,y)∈Sxyg(s,t)             (1.1)

其中g(s,t)为原始图像,f(x,y)为计算得到的灰度值。

通过选取适合大小的矩形模板,模板太大图像越模糊。

1.2  图像分割与形态学算法

1.2.1  图像分割算法

图像分割,就是指从图像到得到自己感兴趣的区域的过程,分割的程度取决于自己需要的部分有没有被成功的提取出来,提取出来后则停止分割。图像分割是图像处理中很重要的一个部分,本文所述的图像分割算法是针对灰度图的一些性质(灰度分布不连续等),主要讨论基于阈值的一些基本算法。

选取一个合适的阈值对于图像二值化而言具有非常重要的意义。阈值过高或者过低都不能够提取出有效的内容。阈值分割的流程是通过每一个像素的灰度与阈值比较区分出背景和前景,从而实现从灰度图到二值图的转化。用数学式子来表达如(1.2):

gx,y=1, fx,y≥T0,fx,y<T                (1.2)

f(x,y)是(x,y)处的灰度,T为阈值,g(x,y)为得到的阈值。

一个恰到好处的阈值的探索也衍生出了诸如迭代式阈值分割,最大累间阈值分割,自适应阈值分割等多种算法。以下部分针对这几种阈值分割算法进行比较得到适应于当前环境的分割算法。

固定阈值分割

基于不同的实验环境,业界的常用阈值分割算法可能得不到满足需求的结果。通过人工经验法,也就是我们自己根据自己对于图像的理解以及对于目标物体的判断,对图像中的目标与背景进行分析。通过对像素的识别,图像的视觉效果的观察,选择出阈值值所在的区间,并通过实验进行对比,最后选择出比较好的阈值。本文通过设置进度条,用户可以拉动进度条,自己选择0-255的阈值进行分割,并且能够实时看到分割结果。

迭代式阈值分割与最大累间方差法

在图像处理过程中,根据肉眼选择阈值然后进行分割固然可行,但是由于每一张图片的成像质量不同,噪声类型不同,而且图像处理往往不是几张,十几张数量级。我们需要一种对于每一张图片都能根据其图片状况自动得到一个适合分割的阈值,下文介绍了的两种这样的分割方法。迭代式阈值分割的步骤是:

  1. 确定一个初始阈值,通常选择灰度均值或者中值,设为T0。
  2. 利用初始阈值将图像的灰度范围划分为两个不同的部分。设小于等于T0的平均灰度为T1,设大于T0的平均灰度T2,其计算式如下式(1.3)和(1.4):

  1. 新阈值T= (T1+T2)2
  2. 判断T0与T的差是否小于预定义参数t,若满足,返回T,若不满足,令T0 = T,循环2,3,4步骤。

最大累间方差法又叫大津法(Otsu),其原理是在图片的灰度范围内,对于每一个出现过的灰度值为基准,将图像分成背景和目标两个部分,通过遍历所有出现的灰度,来求出一个使的这两部分累间方差最大的一个阈值,这也就是使得图像能够将这两类分开的最佳阈值。该方法计算步骤如下:

记前景与背景的分割阈值为T,u0,w0 分别为前景像素平均灰度和前景像素所占比例,u1,w1 分别为背景像素平均灰度和前景像素所占比例。设一幅M×N 的图像,N1N0 分别为背景,前景像素数,累间方差记为g,其计算式如式子(1.5)~(1.9)。

                    (1.5)

                       (1.6)

N0+N1=M×N                  (1.7)

u=w0×u0+w1×u1               (1.8)

g=w1×w0×(u1-u2)2               (1.9)

1.2.2  形态学操作

为了达到提取结构和识别特征的目的,数学形态学的思想是通过构造具有一定尺寸结构的模板去提取图像中感兴趣的特征。形态学的基本的运算有膨胀,腐蚀,开运算和闭运算,这些都是针对灰度图中白色部分(高亮部分)而言的。通过这些基本运算的不同组合可以形成更复杂的形态学操作,形态学操作作用很多,常见的有消除噪声,提取物体,填充物体内部,求图像梯度等等。

膨胀与腐蚀

      膨胀顾名思义是使图像扩大是在图像的边界扩张元素,而侵蚀恰恰相反,是使图像缩小,将图像边界的元素减少。模板的形状和作用范围都很大程度上决定了在该操作边界元素增加或者减少的数量,也就是说原始图形膨胀或者腐蚀的多少。添一般来说,对于灰度图而言,这两个操作遵循的规则如下表

表2.1 膨胀与腐蚀

膨胀

输出像素的值是属于结构元素内的所有像素的最大值。如果落入内核范围内的输入图像的任何像素被设置为值1,则输出图像的相应像素也将被设置为1。

腐蚀

输出像素的值是属于结构元素内的所有像素的最小值。如果落入内核范围内的输入图像的任何像素被设置为值0,则输出图像的相应像素也将被设置为0。

结构元素的选择决定了膨胀和腐蚀作用的范围和形态学操作的意义所在。结构元素的选取多种多样,可以选择任意形状和大小的结构元素,关键在于需要达到什么作用。例如线,菱形,圆盘,周期线以及圆等等。如图2.5展示了7×7 的一个菱形结构元素。

图2.5  7×7 菱形结构

开运算与闭运算

开运算和闭运算是膨胀和腐蚀的两个复合操作。不同之处在于开运算是先腐蚀再膨胀,而闭运算则是相反,先膨胀再腐蚀。开运算和闭运算一般都不改变图像大小和形状,前者通常用来用来去除边缘的起伏,断开狭窄连接部分,构造水平元素模板或者垂直模板也可以用来提取水平线或者垂直线,后者通常用来填平物体内部空洞,图2.6和图2.7展示了通过3*3矩形模板开操作前后对比。

图1.6 开操作前                    图1.7开操作后

二进制图像:又叫二值图,非0即1,常用来表示图形或者轮廓。

灰度图像:8位表示一个像素,0表示黑色,255表示白色。0-255表示不同颜色深度。

RGB图像和多帧图像,索引图像。

图像的表示方法和种类相关推荐

  1. python如何实现图像中特定颜色的种类识别及特定颜色的占比代码

    使用Python实现图像中特定颜色的种类识别及特定颜色的占比代码,首先可以使用OpenCV库对图像进行处理,然后使用特定的函数来识别图像中特定颜色的种类,最后使用统计学方法来计算特定颜色在图像中的占比 ...

  2. python遥感影像地物分类_基于轻量化语义分割网络的遥感图像地物分类方法与流程...

    本发明属于图像处理 技术领域: ,特别涉及一种地物分类方法,可用于土地利用分析.环境保护以及城市规划. 背景技术: :遥感图像地物分类,旨在取代繁琐的人工作业,利用地物分类方法,得到输入遥感图像的地物 ...

  3. 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...

  4. 3D物体分类---ModelNet .OFF格式生成多视角图像(Blender方法之第二步)

    3D物体分类---ModelNet .OFF格式生成多视角图像(Blender方法之第二步) 强烈建议使用Blender方法!!! 说明 2 python调用Blender生成多视角图像 2.1 Bl ...

  5. CVPR 2021 | 基于跨任务场景结构知识迁移的单张深度图像超分辨率方法

    ©PaperWeekly 原创 · 作者|孙宝利 学校|大连理工大学硕士 研究方向|计算机视觉 项目主页: http://faculty.dlut.edu.cn/yexinchen/zh_CN/zdy ...

  6. 计算机视觉:数据预处理-图像增广方法

    计算机视觉:数据预处理-图像增广方法 数据预处理 随机改变亮暗.对比度和颜色等 随机填充 随机裁剪 随机缩放 随机翻转 随机打乱真实框排列顺序 图像增广方法汇总 批量数据读取与加速 数据预处理 在计算 ...

  7. sar图像去噪matlab,一种基于总曲率的SAR图像变分去噪方法与流程

    本发明属于数字图像处理技术领域,具体涉及一种基于总曲率的SAR图像变分去噪方法. 背景技术: : 相干斑噪声是合成孔径雷达(Synthetic Aperture Radar,简称SAR)图像的重要特征 ...

  8. python增强对比度_python增加图像对比度的方法

    python增加图像对比度的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python增加图像对比度的方法.txt ] (友情提示:右键点上行txt文档名 ...

  9. 基于深度学习的图像修补/完整方法分析

    点击我爱计算机视觉标星,更快获取CVML新技术 作者:黄浴,奇点汽车美研中心首席科学家兼总裁 来源:知乎,已获作者授权,禁止二次转载. https://zhuanlan.zhihu.com/p/788 ...

最新文章

  1. vue weex 调用原生toast_vue-template-compiler 还能这么用
  2. 配置hadoop集群一
  3. 1.MySQL基本体系
  4. 数据库更新的时候不能正确的执行找错记录
  5. js php滚动图代码,JavaScript_JS实现的N多简单无缝滚动代码(包含图文效果),本文实例讲述了JS实现的N多简 - phpStudy...
  6. junit测试NoSuchBeanDefinitionException: No bean named ‘dataSource‘ is define
  7. Java面试宝典系列之基础面试题-常见的几种排序算法-插入、选择、冒泡、快排、堆排等
  8. 前端学习(355):小练习
  9. Ajax ControlToolkit - AnimationExtender Action语法(笔记)
  10. js与flash结合使用
  11. C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码
  12. 电脑安装python-如何安装python
  13. Docker 如何支持多种日志方案?- 每天5分钟玩转 Docker 容器技术(88)
  14. 计算机网络 IP:ABC类地址与 子网掩码(ABC类网络均有属于自己的私有IP段 节省32位IP资源 ) 网络地址 主机地址 子网 与子网掩码之间的关系换算 IP和子网掩码相互依存
  15. OpenCV-Python官方文档的查看
  16. 统一社会信用代码正则校验
  17. 接口调用一会正常,一会失败
  18. 2020牛客国庆集训派对day3
  19. 计算机nemurt.dll,DDD~领域事件中使用分布式事务
  20. 原生APP和封装APP区别详解

热门文章

  1. 动态规划之最优配对问题
  2. 流量为王:ABTest流量分层分桶机制
  3. 国际标准免费下载方法
  4. 非师范生教师资格证最新政策
  5. dedecms 无法采集 php.ini,解决织梦DEDECMS换空间不能采集的问题
  6. 小米 admob广告 ID_定了!小米5G新品发布会定在9月24日,4大新品值得期待
  7. 关于Unity特效未播放完的问题
  8. 刺激战场android闪退,《绝地求生刺激战场》老是闪退怎么办 老是闪退解决方法介绍...
  9. 对折纸张(蓝桥杯真题)
  10. Android面试题和答案