【OpenCV 例程200篇】233. 区域特征之矩不变量

『youcans 的 OpenCV 例程200篇 - 总目录』


【youcans 的 OpenCV 例程200篇】233. 区域特征之矩不变量

4.4 区域特征之矩不变量

矩是概率与统计中的一个概念,是随机变量的一种数字特征。矩函数在图像分析中有着广泛的应用,如模式识别、目标分类、图像编码与重构等。

把图像的像素坐标视为二维随机变量 (X,Y),就可以用矩来描述灰度图像的特征。

图像矩是对特征进行参数描述的一种算法,通常描述了图像形状的全局特征,并提供了大量的关于该图像不同类型的几何特性信息,比如大小、位置、方向及形状等。

当图像发生平移时,几何距 mpqm_{pq}mpq 也会发生变化;中心矩 mupqmu_{pq}mupq 具有平移不变性,但在图像旋转时会发生变化;归一化中心距不仅具有平移不变性,而且具有比例不变性(尺度不变性)。

Hu 利用二阶和三阶归一化中心距构造了 7 个不变矩 M1~M7, 在连续图像下具有平移、灰度、尺度、旋转不变性, 是高度浓缩的图像特征。不变矩能够描述图像的整体性质,从而在边缘提取、图像匹配及目标识别中得到了广泛的应用。

OpenCV 提供了函数 cv2.moments() 计算图像矩 Mu,函数 cv2.HuMoments() 计算目标轮廓的 Hu 不变矩。

函数说明:

cv.moments(array[, binaryImage]) → Mu
cv.HuMoments(Mu[, hu]) → Hu

函数 cv2.moments() 以字典(Dict)形式返回图像的矩。

函数 cv2.HuMoments() 以列表(List)形式返回目标轮廓的 Hu 不变矩。

参数说明:

array:是一幅单通道 8-bits 图像,或一个二维浮点数组(如轮廓列表 contours 中的一个轮廓)

binaryImage:指示输入图像是否二值图像

返回值 Mu 是字典格式,包括 24个键值对。

返回值 Hu 是一个列表(List),包括 7 个不变矩 M1~M7,浮点数。

具体定义和计算公式为:
M1=nu20+nu02M2=(nu20−nu02)2+4(nu11)2M3=(nu30−3nu12)2+(3nu21−nu03)2M4=(nu30+nu12)2+(nu21+nu03)2M5=(nu30−3nu12)(nu30+nu12)[(nu30+nu12)2−3(nu21+nu03)2]+(3nu21−nu03)(nu21+nu03)[3(nu30+nu12)2−(nu21+nu03)2]M6=(nu20−nu02)[(nu30+nu12)2−(nu21+nu03)2]+4nu11(nu30+nu12)(nu21+nu03)M7=(3nu21−nu03)(nu30+nu12)[(nu30+nu12)2−3(nu21+nu03)2]−(nu30−3nu12)(nu21+nu03)[3(nu30+nu12)2−(nu21+nu03)2]\begin{aligned} M1 = & nu_{20} + nu_{02}\\ M2 = & (nu_{20} - nu_{02})^2 + 4(nu_{11})^2\\ M3 = & (nu_{30} - 3nu_{12})^2 + (3nu_{21} - nu_{03})^2 \\ M4 = & (nu_{30} + nu_{12})^2 + (nu_{21} + nu_{03})^2\\ M5 = & (nu_{30}-3nu_{12})(nu_{30}+nu_{12})[(nu_{30}+nu_{12})^{2} -3(nu_{21}+nu_{03})^2]\\ + & (3nu_{21}-nu_{03})(nu_{21}+nu_{03})[3(nu_{30}+nu_{12})^2-(nu_{21}+nu_{03})^2]\\ M6 = & (nu_{20} - nu_{02}) [(nu_{30}+nu_{12})^2-(nu_{21}+nu_{03})^2]\\ + &4nu_{11}(nu_{30} + nu_{12})(nu_{21} + nu_{03})\\ M7 = & (3nu_{21}-nu_{03})(nu_{30} + nu_{12})[(nu_{30}+nu_{12})^2-3(nu_{21}+nu_{03})^2]\\ - & (nu_{30}-3nu_{12})(nu_{21}+nu_{03})[3(nu_{30}+nu_{12})^2-(nu_{21}+nu_{03})^2]\\ \end{aligned} M1=M2=M3=M4=M5=+M6=+M7=nu20+nu02(nu20nu02)2+4(nu11)2(nu303nu12)2+(3nu21nu03)2(nu30+nu12)2+(nu21+nu03)2(nu303nu12)(nu30+nu12)[(nu30+nu12)23(nu21+nu03)2](3nu21nu03)(nu21+nu03)[3(nu30+nu12)2(nu21+nu03)2](nu20nu02)[(nu30+nu12)2(nu21+nu03)2]4nu11(nu30+nu12)(nu21+nu03)(3nu21nu03)(nu30+nu12)[(nu30+nu12)23(nu21+nu03)2](nu303nu12)(nu21+nu03)[3(nu30+nu12)2(nu21+nu03)2]

不变矩 M1~M7 又称矩不变量, 在连续图像下具有平移、灰度、尺度、旋转不变性, 是高度浓缩的图像特征。


例程 14.14:区域特征之不变矩

    # # 14.14 特征描述之不变矩gray = cv2.imread("../images/Fig1137.tif", flags=0)  # 灰度图像height, width = gray.shape  # (568, 568)# 图像的平移,缩放,旋转和镜像grayList = []grayList.append(gray)  # [0],原始图像mat = np.float32([[1, 0, 50], [0, 1, 50]])grayList.append(cv2.warpAffine(gray, mat, (height, width)))  # [1],图像平移top, bottom, left, right = height//4, height//4, width//4, width//4grayResize = cv2.resize(gray, (width//2, height//2))  # 图像缩放 (284, 284)replicate = cv2.copyMakeBorder(grayResize, top, bottom, left, right, cv2.BORDER_CONSTANT, value=0)grayList.append(replicate)  # [2],图像缩放并填充至原来尺寸 (568, 568)grayList.append(cv2.flip(gray, 1))  # [3],图像镜像,水平翻转mar = cv2.getRotationMatrix2D((width//2, height//2), angle=45, scale=1)  # 图像中心作为旋转中心rotate = cv2.warpAffine(gray, mar, (height, width))  # 旋转变换,默认为黑色填充grayList.append(rotate)  # [4],图像旋转 45度grayList.append(cv2.rotate(gray, cv2.ROTATE_90_COUNTERCLOCKWISE))  # [5],图像逆时针旋转90度print(gray.shape, grayResize.shape, replicate.shape, rotate.shape,len(grayList))plt.figure(figsize=(9, 6))for i in range(len(grayList)):moments = cv2.moments(grayList[i])  # 返回几何矩 mpq, 中心矩 mupq 和归一化矩 nupqhuM = cv2.HuMoments(moments)  # 计算 Hu 不变矩plt.subplot(2,3,i+1), plt.axis('off'), plt.imshow(grayList[i], 'gray')# print("Moments of gray:\n", moments)print("HuMoments of gray:\n", np.log10(np.abs(huM.T)).round(4))plt.show()

在这里插入图片描述

运行结果:

[[ -2.8662 -7.1265 -10.4109 -10.3742 -21.3674 -13.9417 -20.7809]]
[[ -2.8662 -7.1265 -10.4109 -10.3742 -21.3674 -13.9417 -20.7809]]
[[ -2.8666 -7.1285 -10.4137 -10.3769 -21.3734 -13.9453 -20.7863]]
[[ -2.8662 -7.1265 -10.4109 -10.3742 -21.3674 -13.9417 -20.7809]]
[[ -2.8662 -7.1266 -10.4106 -10.3743 -21.3693 -13.9418 -20.7808]]
[[ -2.8662 -7.1265 -10.4109 -10.3742 -21.3674 -13.9417 -20.7809]]

运行结果表明,矩不变量 M1~M7 具有平移、灰度、尺度、旋转不变性, 是高度浓缩的图像特征。


【本节完】

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125704724)
Copyright 2022 youcans, XUPT
Crated:2022-7-10

231. 特征描述之 灰度共生矩阵(GLCM)
232. 纹理特征之频谱方法
233. 区域特征之矩不变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV 例程200篇】231. 特征描述之灰度共生矩阵(GLCM)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】231. 特征描述之灰度共生矩阵(GLCM) 4.2.4 灰度共生矩阵(GLCM) 灰度共生矩阵(Gray level co-occurrence matrix,GLCM&#xff…

oracle11 处理器数,11G AWR中%Total CPU与%Busy CPU指标的疑问

ODM FINDING:FROM http://www.os2ora.com/how-to-analyze-awr-report-1/ 推荐 kaya 的这篇文章引用如下:如果关注数据库的性能,那么当拿到一份AWR报告的时候,最想知道的第一件事情可能就是系统资源的利用情况了,而首当其冲的&am…

【OpenCV 例程200篇】237. 基于主成分提取的方向校正(OpenCV)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】237. 基于主成分提取的方向校正(OpenCV) 主成分分析(Principal Components Analysis,PCA)是一种基于统计的数据降维方法,又称主…

swoole 捕捉php错误,swoole怎么处理错误

在协程编程中可直接使用try/catch处理异常。但必须在协程内捕获,不得跨协程捕获异常。不仅是应用层throw的Exception,底层的一些错误也是可以被捕获的,如function、class、method不存在下面的代码中,try/catch和throw在不同的协程…

【OpenCV 例程200篇】235. 特征提取之主成分分析(sklearn)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】235. 特征提取之主成分分析(sklearn) 特征提取是指从原始特征中通过数学变换得到一组新的特征,以降低特征维数,消除相关性,减少无用信息…

Linux 进程资源分配,linux 进程管理和内存分配

1、进程相关概念进程:正在运行中的程序内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等Process:运行中的程序的一个副本,是被载入内存的一个指令集合进程 ID(Process ID,PID)号码被用来标记各…

【OpenCV 例程300篇】234. 特征提取之主成分分析(PCA)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】234. 特征提取之主成分分析(PCA) 5.1 特征提取的方法 初步获取的图像特征维数通常很大,而且往往包含一定的无关或冗余特征。特征提取是指从原始特征中通过数学变…

Java并发编程基础

线程的简介 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 为什么要使用多线…

【OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV) 文章目录【youcans 的 OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV)5.2 主成分分析的数学方法5.4 OpenC…

linux 访问共享内存,Linux下的共享内存(03)---通过指针访问共享内存中的数据...

环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、将共享内存挂载至进程:void *shmat(int shmid, const void *shmaddr,int shmflg);参数shmid是要附加的共享内存区标示符。总是把参数shmaddr设为0。参数shmflg可以为SHM_RDON…

Java中锁的使用和实现

首先,我们要了解一个概念,JAVA中的锁到底是什么呢? 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 Lock接口 在Java SE 5之后,并发包中新增了Lock接口&am…

【OpenCV 例程200篇】225. 特征提取之傅里叶描述子

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】225. 特征提取之傅里叶描述子 目标特征的基本概念 通过图像分割获得多个区域,得到区域内的像素集合或区域边界像素集合。我们把感兴趣的人或物称为目标,目标所处的区域就是目…

【OpenCV 例程300篇】238. OpenCV 中的 Harris 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】238. OpenCV 中的 Harris 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测&…

基础线性规划实现(matlab,lingo)

目录 一、本次所需解的问题 二、matlab解题 1)语法 2)数学思维 3)matlab解题 运行结果: 三、lingo解题 lingo解题如下: 运行结果: 最后: 一、本次所需解的问题 需解出下面该线性规划问…

cwntos linux kde桌面,Centos如何安装KDE的桌面

其实KDE其实在初次安装系统的时候就可以选择,我下面是进入系统后的安装方法:第一步:检查KDE首先查看自己是否安装了KDE# yum grouplist在grouplist的输出结果中的“Installed Groups:”部分中,如果你能找到“X Window System”和“…

【OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix) 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界…

基础线性规划实现---python

目录 一、问题 何为线性规划问题: 二、python进行求解 1.通过观察matlab解线性规划步骤进行求解 2.python求解步骤 1)求解用到的模块(scipy 和 numpy): 2)对 max z2x13x2-5x3 该问题确定c如下&…

【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测…

多元统计分析1

第一章 多元正态分布 文章目录 1.1 多元分布的基本概念 1.1.1 随机向量 1.1.2 分布函数与密度函数 联合分布函数: 联合密度函数: 条件密度函数: 分量的独立性: 1.1.3 随机向量的数字特征 1.随机向量的均值 2、随机…

Java并发容器和框架

ConcurrentHashMap 我们为什么要使用 ConcurrentHashMap呢? 原因有三: 并发编程中HashMap会导致死循环;HashTable效率又非常低;ConcurrentHashMap的锁分段技术可有效提升并发访问率。在并发编程使用HashMap会导致死循环。 在多线…