2019-04-05 21:58:05 seven_tree 阅读数 675
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4125 人正在学习 去看看 贾志刚

《计算机视觉特征提取与图像处理(第三版)》第一章(1)

Cpt1 绪论(人类视觉系统/计算机视觉系统/数学系统/参考文献)

1.2 人类视觉和计算机视觉

a. 图像处理领域常用图片/视频:openCV自带的图片库/视频库,例如Lena;
b. 广义图像采集:摄像机图像/MRI(软组织图像/computerized tomography计算断层摄影术/infrared sensor或synthetic-aperture radar遥感图像/sonar array等的空间信息,即计算机视觉系统对广义的图像进行处理;
c. 使用合成图像评价不同方法各自性能的局限;
纹理库:Brodatz album of texture,Brodatz纹理相簿;
http://multibandtexture.recherche.usherbrooke.ca/original_brodatz.html

1.3 人类视觉系统

a. 人类视觉善于区分相对距离,而不善于估计绝对距离,计算机视觉正好相反,善于估测绝对差异,但对相对差异估测的效果较差;
b. 人类视觉系统可以用三个部分来建模:
眼睛,物理模型,很多功能可以用病理学来确定;
处理系统,实验模型,不能精确断定;
脑分析,心理模型,通过实验或推理来判断它的活动;

1.3.1 眼睛物理模型

a. 虹膜iris/瞳孔pupil;角膜cornea或巩膜sclera;脉络膜choroid;视网膜retina;中央凹forvea;盲点blind spot;
b. 感光细胞分为:
rod柱细胞(暗视觉,scotopic vision,1千万左右)
cone锥细胞(明视觉,photopic vision,1亿左右),分为S短波长(蓝光,数量少)、M中波长(绿光)、L长波长(红光);
c. 视敏度,通常表现为空间分辨率(清晰度)和亮度/色彩分辨率,;
d. 视觉响应成对数特性,依赖于从暗处到亮处的亮度适应;
e. 马赫带效果(Mach band):不同亮度区域的交界处在人眼中存在过冲响应以便于区分视界内的不同目标;人类视觉实际上可以辨别5bit的灰度等级;

1.3.2 神经系统

眼睛产生的神经信号实际上是视锥细胞和视杆细胞两种细胞所传送的响应,通过加法模型和对数函数模型映射眼睛产生的已知响应;然后与权重因子相乘调节特定单元权重;

1.3.3 处理系统

a. 神经信号被传送到大脑的两个区域进行进一步处理,分别为联络皮层和枕叶皮层;
b. 参考书:The Joy of Vision,Schwarz;
www.yorku.ca./eye/thejoy.htm

1.4 计算机视觉系统

1.4.1 摄像机

a. 成像原理:空穴/电子对的数量同入射光量成正比,亮度增强则电流增大,电压增大;
b. 摄像机主要分为:摄像管(早期模拟技术,需要扫描过程,性能较差,存在部件磨损;)、CCD(Charge Coupled Devices)相机和CMOS(Complementary Metal Oxide Silicon)相机;
半导体像素传感器可以分为passive sensor无源传感器和active sensor有源传感器;

1.4.2 图像处理

a. C、C++、Java是目前为止最受欢迎的视觉系统实现语言,在集成高低和低级功能方面力量强大且编译能力较强;
基于Java的演示系统:http://www.southampton.ac.uk/~msn/book/new_demo/
软件包:OpenCV,“通过创建一个免费和开放的基础平台把视觉领域的成果进行整合和性能优化,帮助计算机视觉在人机交互、机器人、监测、生物测量和安全方面实现商业应用”;
VXL库(vision-something-libraries),为计算机视觉研究和实现而设计的而设计的C++库集https://vxl.github.io/;
Adobe通用图像库(GIL),旨在减少图像相关代码的编写难度http://stlab.adobe.com/group__asl__gil.html;
CImg Library,图像处理算法通用平台系统,http://www.cimg.eu/;
VLFeat,http://www.vlfeat.org/;
此外还包括部分有开源软件的竞赛网站,如ACM Multimedia;

1.5 数学系统

1.5.1 数学工具

a. 目前最受欢迎的数学系统有Mathematica、Maple、MATLAB、Mathcad等;

1.5.2 Hello MATLAB,hello images

a. Matlab提供强有力的矩阵计算来开发和测试复杂的实现;
本书成像模型采用正投影,,世界坐标直接映射到图像;通过Matlab的应用代码转换比其他系统容易,能够将代码直接编译;

1.5.3 Hello, Mathcad!

a. Mathcad是一个所见即所得系统,而不是基于屏幕的(把Mathcad看作Word,则Matlab看作Latex);Mathcad使用Mapple数学库来扩展其功能;
因为必须包含低级函数,Mathcad代码的应用比Matlab复杂;
可以从参考网站下载worksheet;

1.6 相关资料

1.6.1 期刊杂志和学术会议

a. Vision System Design和Advanced Imaging
b. IEEE Transactions on: Pattern Analysis and Machine Intelligence
Image Processing;
System, Man and Cybernetics;
Medical Imaging;
Pattern Recognition;
Pattern Recognition Letters;
International Journal of Computer Vision;
Image and Vision Computing;

1.6.2学术会议:

IEEE;
CVPR;
ICCV;
Springer,Lecture Notes in Computer Science

1.6.3 书籍推荐

a. World of Mathematics;
b. Numerical Recipes信号处理相关;
c. Digital Signal Processing;
d. Joy of Visual Perception;
e. CVOnline,
http://homepages.inf.ed.ac.uk/rbf/CVonline/(强烈推荐!!!!)
f. Vision
Fundamentals of Computer Vision
Robot Vision
Image Processing, Analysis and Computer Vision(Sonka et al., 2007)
Machine Vision(Jain et al., 1995)
Digital Image Processing(Gonzalez and Woods, 2008),冈萨雷斯的著名教程
Digital Picture Processing(Rosenfeld and Kak, 1982)
Digital Image Processing(Pratt, 2001)
Active Contour(Blake and Isard, 1998)
Image Processing The Fundamentals(Petrou and Petrou, 2010)
Computer Vision(Shapiro and Stockman, 2001),图像数据库和虚拟及增强现实
Computer Imaging: Digital Image Analysis and Processing(Umbaugh, 2005)
Computer Vision: A Modern Approach(Forsyth and Ponce, 2002)
Image Processing and Computer Vision(Parker, 2010)
Practical Algorithms for Image Analysis(O’ Gorman et al., 2008 )
Computer Vision and Image Processing(Umbaugh, 2005) ,侧重工程性
The Art of Image Processing with Java(Hunt, 2011),Java教程
The Image Processing Handbooks(Russ, 2006)
Machine Vision: Theory, Algorithms and Practicalities(Davies, 2005),侧重工业视觉系统
Handbook of Pattern Recognition and Computer Vision(Cheng and Wang, 2009);

2018-03-11 11:45:15 qxconverse 阅读数 5119
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4125 人正在学习 去看看 贾志刚

关于经典的计算机视觉这一块,简单地总结一下,罗列一些知识点,方便以后的再学习或是查阅。之所以称它为经典的,主要是因为里面都是些传统的方法,相较于最近几年才发展起来的深度学习方法而言。


1. 绪论

2. 图像、采样、频域处理

2.1 灰度,颜色,分辨率,动态范围,存储等

关于采样,要先理解信号在频域中的解释,理解傅里叶变换。
采样标准:为了从样本重构原信号,采样频率必须至少是被采样信号最大频率的两倍。

2.2 离散傅里叶变换,其特性

平移、旋转、尺度变化,频域叠加(线性)。

2.3 除了傅里叶以外的其它变换

离散余弦变换
离散Hartley变换
小波变换
Walsh变换

2.4 滤波——频域特性的应用

3. 基本的图像处理运算

3.1 直方图

3.2 点运算

亮度映射:加法、反转、尺度变化、对数、指数。
亮度正规化,直方图均衡化,阈值处理和最优阈值处理。

3.3 群运算

模板卷积(包括频域实现)。统计算子:直接平均,高斯滤波,中值滤波,众数(截断中值)滤波。
直接平均:可以去除大量的噪声,但是使特征边界模糊;
高斯滤波:保留更多特性,但是与直接平均相比,几乎没有优势(噪声不是高斯分布的);
中值滤波:保留一些噪声,但是得到清晰的边界特征;
截断中值滤波:去除更多噪声,但也去除更多的图像细节。
图像平滑处理的各向异性扩散。
力场变换。
数学形态学:击中或未击中变换,腐蚀,膨胀(包括灰度算子:腐蚀算子,膨胀算子,开算子,闭算子等),明科夫斯基算子。

4. 低级特征提取(包括边缘检测)(边缘检测、角点检测、运动检测)

4.1 边缘检测

一阶边缘检测算子
差分运算、Roberts交叉算子、平滑处理、Prewitt、Sobel、Canny等算子。
二阶边缘检测算子
二阶差分、Laplacian算子、过零点检测;Marr-Hildreth算子、Laplacian of Gaussian,高斯差分,尺度空间。
其它的边缘检测算子:Spacek算子,Petrou算子、Susan算子。
所有边缘算子的结果都是用滞后阈值处理来实现的。
对于拥有很大噪声的图像,Canny算子、Spacek算子相较于其它的算子表现要好些。

4.2 相位一致性

相位一致性方法是一个特征检测算子,主要有两个优点:

  1. 可以检测大范围的特征;
  2. 对局部(和平滑)光照变化具有不变性。

频域分析;检测一连串特征;光度不变性,小波。

4.3 定位特征提取(角点提取)

平面曲率;角点;Moravec和Harris检测器;尺度空间。
SIFT(尺度不变特征变换)
其具有尺度、旋转不变性。对光照变化也有一定的不变性。
SURF(加速的鲁棒特征)。
显著性算子。

4.4 描述图像运动

差分检测;光流,孔径问题,平滑约束;微分方法;Horn and Schunk方法;相关性。

5. 形状匹配的特征提取

5.1 阈值处理和背景减法(差分)

5.2 模板匹配

直接实现和傅里叶实现。

5.3 低级特征

收集低级特征进行目标提取;基于频率的和基于部件的方法;检测测量值的分布。
小波和Haar小波;SIFT和SURF描述;以及方向梯度的直方图。

5.4 霍夫变换

通过匹配进行特征提取;利用霍夫变换检测二次曲线,以及任意形状;不变性表达。

6. 高级特征提取:可变形形状分析

不具备目标形状(即特征)模型的知识;形状未知或形状的波动无法参数化。

6.1 可变形形状分析

可变形模板;能量最大化;基于部分的形状分析;

6.2 主动轮廓和蛇模型

曲线演变的能量最小化;贪心算法;Kass蛇模型。

6.3 形状骨架化

距离变换和形状骨架;平均轴变换;离散对称算子;对称点分布的证据累加。

6.4 主动形状模型

通过统计方法表达形状变化;利用特征提取获取形状变化。
主动形状模型;主动外观模型;主成分分析。

7. 目标描述

7.1 边界描述

边界和区域,如何确定边界及其所界定的区域,如何形成区域描述及其必要的特性?
基本方法:链码。傅里叶描述符:离散近似;累积角函数和椭圆傅里叶描述符。

7.2 区域描述符

如何描述形状的区域?
基本形状量度:面积;周长;紧凑度;分散性。
矩:基本矩;中心矩;不变矩;Zernike矩;特性及重构。

8. 纹理描述、分割和分类基础

8.1 纹理描述

什么是图像纹理,如何确定几组数值来识别纹理?
特征提取:傅里叶变换,共生矩阵,区域;
现代方法:局部二值模式(LPB)和均一LBP。
特征描述:能量,熵,惯性。

8.2 距离量度

距离量度:Manhattan城区和欧式(L1/L2距离),Mahalanobis,Bhattacharyya和余弦;构造、可视化和混淆矩阵。

8.3 纹理分类

如何将所得的数值与已知样本相联系?
k近邻法则,支持向量机及其它分类方法(与机器学习交叉的部分)。

8.4 纹理分割

如何在图像范围内找出纹理区域?
卷积计算,平铺处理,阈值处理。

9. 运动对象的检测与描述

9.1 运动对象提取

如何将运动对象从它们的背景中分离?
应用到背景图像估计的平均与中值滤波。通过减从背景分离。通过高斯混合与阈值化处理改善。
问题:颜色、光照和阴影。
使用膨胀与腐蚀;开、闭运算。连通组件分析。

9.2 运动对象跟踪

跟踪过程中实现时域一致性。建模线性系统动力学。
通过局部搜索进行跟踪;Lucas-Kanade方法;Kalman滤波;多目标跟踪;特征点与背景减的比较;Camshift与Meanshift方法。对象检测跟踪。

9.3 运动形状分析与描述

通过证据收集描述运动以及提取运动形状。添加速率与位移到形状描述;针对识别目的,描述运动目标。

2019-04-09 21:35:11 seven_tree 阅读数 259
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4125 人正在学习 去看看 贾志刚

第三章 基本图像处理运算

3.2 直方图

a. 亮度直方图表示每个亮度级在图像中的占有率;一般图像对比度是通过亮度级范围来度量的;
直方图拉伸可以增强图像对比度;通过和理想直方图进行对比,可以进行噪声处理;

3.3 点算子

3.3.1 基本点运算

a. 点运算指,以单个像素作为输入,并输出单个像素的运算;
简单的线性点运算(如复制、亮度翻转、亮度相加、亮度的乘法变化等)通常可以表达为线性方程的形式;
b. 锯齿算子,用于强化局部对比变化;
c. 非线性点运算,例如通过对数函数压缩亮度范围,通过指数函数扩大亮度级范围,它们一般用于均衡相机的响应或者压缩显示的亮度级范围;
自然地,应用对数点算子会把亮度值的乘法转变为加法,可以用来降低乘法性亮度变化的效果;它还常用于傅里叶变换压缩以便更好地显示,这是由于直流分量与其他点的对比可能非常大以至于无法显示其他点;
d. 点算子的硬件实现包括查找表等方法;

3.3.2 直方图正规化

a. 直方图正规化用于扩展亮度级范围,其计算公式为,
直方图正规化
3.3.3 直方图均衡化
a. 直方图均衡化的目的是通过一种适合人类视觉分析的方法来增强图像的亮度,作用是使图像的直方图更加平坦;
直方图均衡映射函数为,
直方图均衡化
其中q为新图像对应灰度,p为旧图像灰度等级,Nx,y表示输出图像像素;
b. 直方图均衡,正如名字表述的那样,可以使灰度分布更加均衡;
c. 对图像进行线性亮度变换并不影响其直方图均衡化的结果;
由于直方图均衡化对噪声敏感,在电子系统中噪声不可能真正的消除,因此直方图均衡化很少用于通用的图像处理系统,但在专业应用中非常有效;此外,直方图均衡化是非线性处理,且是不可逆的,因此在实际应用中更常用的是直方图正规化;

3.3.4 阈值处理

a. 包括均一阈值处理,最优应阈值处理等;
b. 最优阈值处理用于更好地对目标和背景进行区分;Otsu方法是最受欢迎的最优阈值处理方法之一;基本原理是利用正规化直方图,其中每个亮度级的值为该亮度级的点数除以图像总点数,因此亮度级的概率分布表示为p(l)=(N(l))/N^2 ,计算正规化直方图到亮度级k的零阶和一阶累积矩,ω(k)=∑p(l) ,μ(k)=∑_l∙p(l) ,图像的总平均级计算为μT=∑l∙p(l) ,这样类分离的方差可以表示为
在这里插入图片描述
最优阈值即类分离方差最大时的亮度等级在这里插入图片描述;

3.4 群运算

a. 群运算是利用分组处理,根据一个像素的邻域来计算新像素值;
3.4.1 模版卷积
a. 模版卷积是一种常用的群运算表征方式,基础模版为方形,大小为奇数从而保证恰当定位;
b. 由于模版不能超出图像,无法计算新图像边界的新值,所以新图像比原始图像尺寸小;
计算边界像素的值一般由3种选择:

  1. 设置边界为黑色;
  2. 假设图像沿两个维度方向重复,利用循环位移根据另一边界来计算新值;
  3. 修改边界模版形状;

上述方法都不是最优的,但是考虑一般兴趣目标不处在图像边缘,因此边界信息认为对处理没有影响;
c. 以简单的加权算子33模版为例,目标像素值即当前像素值33范围内像素值的加权和;
d. 模版卷积可以表示为,N=W*O,其中W表示权重模版,O为输入图像;

3.4.2 平均算子

a. 模版尺寸为(2N+1)*(2N+1),内部元素权重为1/(2N+1)2 ;
平均处理会消除图像细节,同时可以降低噪声,从频域来看可以看作是低通滤波器;模版尺寸越大可以滤除的噪声越多;
b. 傅里叶变换可以给出另一种实现模版卷积的方法,并且利用较大的模版加快实现速度,通过将图像频域和模版频域进行相乘;要求模版和图像大小相等,包含模版的图像在变换之前需要补零;计算过程为,
P
T=ς-1 (ς§×ς(T))

3.4.3 不同的模版尺寸

a. 常用模版尺寸为3/5/7;一般算子尺寸越大,图像细节越少,频域上限越低;

3.4.5 高斯平均算子

a. 高斯平均算子被认为是对图像平滑处理的最优算法;
高斯算子模版通过高斯关系式进行设置,对坐标x,y的像素,其高斯函数g利用方差σ2进行计算,
高斯平均模版计算
方差的选择要确保模版系数在模版边界上近似零,以5*5模版为例,其方差通常选为1;
b. 高斯函数可以近似忽略距离模版中心距离大于3σ的点的影响;相比平均算子,高斯平均算子可以保留更多的细节特征;
c. 高斯平均算子和图像进行卷积得到高斯模糊函数,通过缩放x和y的坐标值可以得到高斯模糊函数的不对称特性,这样的处理可以应用于目标的形状和方向在图像分析前已知的情形;
d. 高斯平均相比普通平均的优势可以用傅里叶变换理论解释,平均滤波算子在空间域表现为二维方波,其频域形式为二维sinc函数,该变换有一个变换幅度不以平滑方式减小的频率响应;
作为对比,高斯函数的频域变换同样是高斯函数,较为平滑且没有边波带;
e. 平均处理实际上是一个统计算子,其目的是估算局部近邻的平均值,处理过程中会引入较大的误差,对于容量为N的样本,统计误差数量级为Error=Mean/√N
增加平均算子尺寸可以改善计算误差,但通常会导致细节损失;

3.5 其他统计算子

3.5.1 中值滤波

a. 中值滤波算子的输出为邻域像素统计的中值;所采用的模版和平均处理类似;计算需求推动了其他形状模版的使用比如十字形、线形、优势方向等;
b.中值算法可以去除椒盐噪声同时保留边界;
椒盐噪声是由于图像传输系统中的解码误差等原因产生的,导致图像中出现孤立的白点和黑点;

3.5.2 众数滤波 mode

a. 由于图像的众数存在与否很难确定,众数需要依靠一定的计算规则,了截断中值滤波假设对于非高斯分布而言,图像的平均值、中值和众数的次序是相同的,因此如果把分布截断,那么截断分布中的中值将接近原分布中的众数;
中值小于平均值,截断点upper=2median-min(distribution);
中值大于均值,截断点lower=2
median-max(distribution);
b. 众数滤波一般用于消除瑞利噪声;

2014-12-09 19:42:07 Speknighter 阅读数 878
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4125 人正在学习 去看看 贾志刚

概念

        直方图:亮度直方图表示每个亮度级在图像中的占有率,图像对比度是通过亮度级范围来度量的,而直方图所示的是特定亮度级像素点的数目。

        直方图拉伸和直方图均衡化是两种常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而扩大前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。

直方图正规化

         直方图正规化(histogram normalization)是常见的扩展亮度级的方法,将原直方图进行扩展和位移,使直方图涵盖所有256个亮度级。

         matlab代码实现:

function normalization()
close all;
clear all;
clc;
I = imread('3.jpg');
set(gcf, 'outerposition', get(0, 'screensize'));
grayI = rgb2gray(I);
subplot(221);
imshow(grayI, []);
title('原始灰度图像');

%原始灰度图像直方图
subplot(222);
imhist(grayI, 255);
title('直方图');

%直方图正规化
grayI = double(grayI);
[rows, cols] = size(grayI);
minim = min(min(grayI));
range = max(max(grayI)) - minim;
range = double(range);

for x = 1 : rows
    for y = 1 : cols
        grayI(x,y) = floor(((grayI(x,y)-minim)*255)/range);
    end
end

%直方图正规化后的图像
subplot(223);
imshow(grayI, []);
title('正规化灰度图像');

%正规化后的直方图
subplot(224);
imhist(uint8(grayI), 255);
title('正规化直方图');

        效果图如下:

直方图均衡化

        直方图均衡化是一个非线性处理过程,映射函数满足单调递增,且存在上下确界,增强局部对比。

        matlab代码实现:

function equalization()
close all;
clear all;
clc;
I = imread('2.jpg');
set(gcf, 'outerposition', get(0, 'screensize'));
grayI = rgb2gray(I);
subplot(221);
imshow(grayI, []);
title('原始灰度图像');

%原始灰度图直方图
subplot(222);
imhist(grayI, 225);
title('原始灰度图直方图');

dict = zeros(256, 1);
[rows, cols] = size(grayI);
for i = 1 : rows
    for j = 1 : cols
        dict(grayI(i, j) + 1, 1) = dict(grayI(i, j) + 1, 1) + 1;
    end
end

sum = 0;
for k = 0 : 255
    sum = sum + dict(k + 1, 1);
    dict(k + 1, 1) = floor((sum*255)/(rows*cols)+0.000001);
end

for m = 1 : rows
    for n = 1 : cols
        grayI(m, n) = dict(grayI(m, n) + 1, 1);
    end
end

subplot(223);
imshow(grayI);
title('均衡化后的灰度图像');

%均衡化后的直方图
subplot(224);
imhist(grayI, 255);
title('均衡化后的直方图');

end

        效果图如下:


阈值处理

        ostu阈值处理图像二值化问题,通过定义类间差来选择最优的阈值。类间差用来表征阈值左右两个区域间灰度值差别程度,差别程度越大,说明边界部分大致分到了一边,非边界被分到另一边。

        matlab实现代码:

function Otsu()
close all
clear all
clc
I = imread('1.jpg');
set(gcf, 'outerposition', get(0, 'screensize'));
I = rgb2gray(I);
subplot(121);
imshow(I);
title('原始图像');

[rows, cols] = size(I);
dict = zeros(256, 1);
prob = zeros(256, 1);
mean = 0;
mean1 = zeros(256, 1);
mean2 = zeros(256, 1);

for i = 1 : rows
    for j = 1 : cols
        dict(I(i,j) + 1, 1) = dict(I(i,j) + 1, 1) + 1;
    end
end

prob(1) = dict(1, 1)/rows/cols + 0.00000001;
for k = 2 : 256
    prob(k, 1) = prob(k-1) + dict(k, 1)/rows/cols;
end

for m = 1 : 256
    mean = mean + dict(m, 1) * (m - 1);
end
mean = mean/rows/cols + 0.0000001;

mean1(1, 1) = 0.00000001;
mean2(1, 1) = mean; 
for n = 2 : 256
    mean1(n, 1) = mean1(n-1, 1) * dict(n-1, 1) + dict(n, 1) * (n - 1);
    dict(n, 1) = dict(n, 1) + dict(n-1, 1);
    if(dict(n, 1) > 0)
        mean1(n, 1) = mean1(n, 1)/dict(n, 1);
        mean2(n, 1) = mean - mean1(n, 1);
    else
        mean1(n, 1) = 0.00000001;
        mean2(n, 1) = mean;
    end
end

sigma = 0;
threshold = 0;
for s = 1 : 256
    if(prob(s, 1) * (1-prob(s, 1)) * (mean1(s, 1)-mean2(s, 1)) * (mean1(s, 1)-mean2(s, 1)) > sigma)
        threshold = s - 1;
        sigma = prob(s, 1) * (1-prob(s, 1)) * (mean1(s, 1)-mean2(s, 1)) * (mean1(s, 1)-mean2(s, 1));
    end
end

for r = 1 : rows
    for c = 1 : cols
        if(I(r,c) >= threshold)
            I(r,c) = 255;
        else
            I(r,c) = 0;
        end
    end
end

subplot(122);
imshow(I);
title('二值图像');

        效果图如下:



2019-06-19 21:01:41 Aoman_Hao 阅读数 743
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4125 人正在学习 去看看 贾志刚

LOG,HOG,DOG微分算子在近圆的斑点检测方面效果很好

HOG特征

https://blog.csdn.net/coming_is_winter/article/details/72850511
https://blog.csdn.net/zouxy09/article/details/7929348/

总结:Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。

例如,对于64*128的图像而言,每16*16的像素组成一个cell,每2*2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4*9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。

特征总数: 一个cell有9个特征(9个梯度方向),每个特征cell块里有 num*9个特征,步长像素规格:(列像素数-步长)/步长*(行像素数-步长)/步长,
总特征数:(列像素数-步长)/步长*(行像素数-步长)/步长*num*9

LOG特征

图像与某一个二维函数进行卷积运算实际就是求取图像与这一函数的相似性。同理,图像与高斯拉普拉斯函数的卷积实际就是求取图像与高斯拉普拉斯函数的相似性。当图像中的斑点尺寸与高斯拉普拉斯函数的形状趋近一致时,图像的拉普拉斯响应达到最大。

Laplace可以用来检测图像中的局部极值点,但是对噪声敏感,所以在我们对图像进行Laplace卷积之前,我们用一个高斯低通滤波对图像进行卷积,目标是去除图像中的噪声点

先对图像f(x,y)用方差为σ的高斯核进行高斯滤波,去除图像中的噪点。

L(x,y;σ)=f(x,y)∗G(x,y;σ)
G(x,y;σ)高斯核
然后对图像的拉普拉斯图像则为:

∇^2=(∂^2L/∂^x2)+(∂^2L/∂y^2)
而实际上有下面等式:

∇^2[G(x,y)∗f(x,y)]=∇^2[G(x,y)]∗f(x,y)

我们可以先求高斯核的拉普拉斯算子,再对图像进行卷积

使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG

Haar特征

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为

白色矩形像素和减去黑色矩形像素和

Haar-like特征

https://blog.csdn.net/zouxy09/article/details/7929570

积分图就是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。

       积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(这有个相应的称呼,叫做动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。

       我们来看看它是怎么做到的。

       积分图是一种能够描述全局信息的矩阵表示方法。积分图的构造方式是位置(i,j)处的值ii(i,j)是原图像(i,j)左上角方向所有像素的和:

归一化图像

i¯(x,y)=(i(x,y)−μ)/cσ
公式中i¯(x,y)表示归一化之后的图像,而i(x,y)表示原始的图像,其中μ表示图像的均值,而σ表示图像的标准差
σ2=(1/N)∑x2−μ2   2是平方

SIFT特征

SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换(物体怎么转,人都能识别)。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。

有4个主要步骤

1、尺度空间的极值检测 搜索所有尺度空间上的图像,通过高斯微分函数来识别潜在的对尺度和选择不变的兴趣点。

$$$L(x,y,σ)=G(x,y,σ)∗I(x,y)$

为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分核与图像卷积生成。构造高斯差分尺度空间(DOG scale-space): 
$$D(x,y,σ)=(G(x,y,kσ)−G(x,y,σ))∗I(x,y)=L(x,y,kσ)−L(x,y,σ)$$

σ 是尺度坐标。σ大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。

对于一幅图像I,建立其在不同尺度(scale)的图像,后面每个采样都是原图的1/4倍。

每个点都要与邻域的点,上下相邻尺度的点做比较(9+8+9)26个点作比较(以确保在尺度空间和二维图像空间都检测到极值点)。一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点

2、特征点定位 在每个候选的位置上,通过一个拟合精细模型来确定位置尺度,关键点的选取依据他们的稳定程度。

拟和三维二次函数以精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力

用Harris Corner检测
参考文章

3、特征方向赋值 基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,后续的所有操作都是对于关键点的方向、尺度和位置进行变换,从而提供这些特征的不变性。

每个特征点计算一个方向,依照这个方向做进一步的计算, *利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。

m(x,y)=(L(x+1,y)L(x1,y))2+(L(x,y+1)L(x,y1))2m(x,y)=(L(x+1,y)−L(x−1,y))2+(L(x,y+1)−L(x,y−1))2
θ(x,y)=atan2(L(x,y+1)L(x,y1)L(x+1,y)L(x1,y)√θ(x,y)=atan2(L(x,y+1)−L(x,y−1)L(x+1,y)−L(x−1,y)
每个关键点有三个信息:位置、所处尺度、方向。由此可以确定一个SIFT特征区域。
直方图
4、特征点描述 在每个特征点周围的邻域内,在选定的尺度上测量图像的局部梯度,这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变换。

高斯函数是唯一可行的尺度空间核

尺度空间

多分辨率图像金字塔:

1、对原始图像进行平滑
2、对处理后的图像进行降采样(通常是水平、垂直方向的1/2)降采样后得到一系列不断尺寸缩小的图像。显然,一个传统的金字塔中,每一层的图像是其上一层图像长、高的各一半。多分辨率的图像金字塔虽然生成简单,但其本质是降采样,图像的局部特征则难以保持,也就是无法保持特征的尺度不变性。

高斯尺度空间:

图像的模糊程度来模拟人在距离物体由远到近时物体在视网膜上成像过程,距离物体越近其尺寸越大图像也越模糊,这就是高斯尺度空间,使用不同的参数模糊图像(分辨率不变)

图像和高斯函数进行卷积运算,图像模糊,使用不同的“高斯核”可得到不同模糊程度的图像

L(x,y,σ)=G(x,y,σ)∗I(x,y)

其中G(x,y,σ)是高斯核函数
G(x,y,σ)=(1/2Πσ^2)e^((x^2+y^2)/(2σ^2))

构建尺度空间的目的是为了检测出在不同的尺度下都存在的特征点,而检测特征点较好的算子是Δ^2G(高斯拉普拉斯,LoG)

DoG特征

使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG。

DOG可以看作为LOG的一个近似,但是它比LOG的效率更高。
设k为相邻两个高斯尺度空间的比例因子,则DoG的定义:

D(x,y,σ)=[G(x,y,kσ)−G(x,y,σ)]∗I(x,y)=L(x,y,kσ)−L(x,y,σ)

L(x,y,σ) 是图像的高斯尺度空间
将相邻的两个高斯空间的图像相减就得到了DoG的响应图像

Harris角点特征提取

Harris角点检测是一种基于图像灰度的一阶导数矩阵检测方法。检测器的主要思想是局部自相似性/自相关性,即在某个局部窗口内图像块与在各个方向微小移动后的窗口内图像块的相似性。

1、角点可以是两个边缘的角点;
2、角点是邻域内具有两个主方向的特征点;

人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

xyz=(1+ex)2xyw x^{y^z}=(1+{\rm e}^x)^{-2xy^w}

sqrt()sqrt()

结论:1、增大α的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小α值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量。
2、Harris角点检测算子对亮度和对比度的变化不敏感
3、Harris角点检测算子具有旋转不变性
4、Harris角点检测算子不具有尺度不变性

没有更多推荐了,返回首页