当前位置:网站首页>【OpenCV 例程200篇】233. 区域特征之矩不变量
【OpenCV 例程200篇】233. 区域特征之矩不变量
2022-07-17 11:18:00 【小白YouCans】
『youcans 的 OpenCV 例程200篇 - 总目录』
【youcans 的 OpenCV 例程200篇】233. 区域特征之矩不变量
4.4 区域特征之矩不变量
矩是概率与统计中的一个概念,是随机变量的一种数字特征。矩函数在图像分析中有着广泛的应用,如模式识别、目标分类、图像编码与重构等。
把图像的像素坐标视为二维随机变量 (X,Y),就可以用矩来描述灰度图像的特征。
图像矩是对特征进行参数描述的一种算法,通常描述了图像形状的全局特征,并提供了大量的关于该图像不同类型的几何特性信息,比如大小、位置、方向及形状等。
当图像发生平移时,几何距 m p q m_{pq} mpq 也会发生变化;中心矩 m u p q mu_{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,浮点数。
具体定义和计算公式为:
M 1 = n u 20 + n u 02 M 2 = ( n u 20 − n u 02 ) 2 + 4 ( n u 11 ) 2 M 3 = ( n u 30 − 3 n u 12 ) 2 + ( 3 n u 21 − n u 03 ) 2 M 4 = ( n u 30 + n u 12 ) 2 + ( n u 21 + n u 03 ) 2 M 5 = ( n u 30 − 3 n u 12 ) ( n u 30 + n u 12 ) [ ( n u 30 + n u 12 ) 2 − 3 ( n u 21 + n u 03 ) 2 ] + ( 3 n u 21 − n u 03 ) ( n u 21 + n u 03 ) [ 3 ( n u 30 + n u 12 ) 2 − ( n u 21 + n u 03 ) 2 ] M 6 = ( n u 20 − n u 02 ) [ ( n u 30 + n u 12 ) 2 − ( n u 21 + n u 03 ) 2 ] + 4 n u 11 ( n u 30 + n u 12 ) ( n u 21 + n u 03 ) M 7 = ( 3 n u 21 − n u 03 ) ( n u 30 + n u 12 ) [ ( n u 30 + n u 12 ) 2 − 3 ( n u 21 + n u 03 ) 2 ] − ( n u 30 − 3 n u 12 ) ( n u 21 + n u 03 ) [ 3 ( n u 30 + n u 12 ) 2 − ( n u 21 + n u 03 ) 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(nu20−nu02)2+4(nu11)2(nu30−3nu12)2+(3nu21−nu03)2(nu30+nu12)2+(nu21+nu03)2(nu30−3nu12)(nu30+nu12)[(nu30+nu12)2−3(nu21+nu03)2](3nu21−nu03)(nu21+nu03)[3(nu30+nu12)2−(nu21+nu03)2](nu20−nu02)[(nu30+nu12)2−(nu21+nu03)2]4nu11(nu30+nu12)(nu21+nu03)(3nu21−nu03)(nu30+nu12)[(nu30+nu12)2−3(nu21+nu03)2](nu30−3nu12)(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//4
grayResize = 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 和归一化矩 nupq
huM = 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 具有平移、灰度、尺度、旋转不变性, 是高度浓缩的图像特征。
【本节完】
版权声明:
[email protected] 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125704724)
Copyright 2022 youcans, XUPT
Crated:2022-7-10
边栏推荐
- Chapter XI queue of STL
- 关于基础模块中的依赖由微服务中的子模块继承的时候依赖失效的问题
- MySQL -- SQL optimization case -- implicit character encoding conversion
- Develop the first Flink app
- 【C语言】浅涉选择、循环语句、函数及数组
- mof定制产品|N-K2Ti4O9/g-C3N4/UiO-66三元复合材料|纸基Au-AgInSe2-ZIF-8纳米复合材料
- [动态规划]DP27 跳跃游戏(二)-中等
- Chapter 13 set/ multiset of STL
- 镧系金属有机骨架([email protected])|罗丹明6G修饰MOF材料|过氧化氢酶@ZIF复合材料|mof材料
- 2022.7.16-----leetcode. Sword finger offer 041
猜你喜欢
随机推荐
第4章-一阶多智体系统一致性 -> 切换拓扑系统一致性
【C语言】字符串、转义字符及注释
壳聚糖包裹PCN224纳米粒子|金属-有机骨架Fe-MIL-88NH2|镍基MOF材料(Ni-MOF/NF)
Dedecms dream weaving article list Title repeated display solution
Interview questions - design test cases for:: memcpy function
水下机器人ROV和AUV
Build a server environment with node+express
Code to celebrate the Dragon Boat Festival -- Zong your heart
Chapter VIII vector of STL
npm使用
On the problem of dependency invalidation when the dependency in the basic module is inherited by the sub module in the microservice
闲谈工业企业全厂信息化规划
Series operation of vector container (detailed explanation)
齐岳供应负载亚甲基蓝的CuMOF纳米晶|原位生长在泡沫镍上FeMOF纳米片|氧化物纳米线/ZIF系MOFs糖葫芦状复合材料
Componentized advanced -- slot
流量排名100W网站
第一部分—C语言基础篇_4. 程序流程结构
Huawei wireless devices are configured with static load balancing
Chapter 4 - consistency of first-order multi-agent systems - > consistency of continuous time systems with time delays
Chapter 13 set/ multiset of STL
![[Luogu] p2357 tomb keeper](/img/89/34f543d9838293508252a3701f2db5.jpg)
![[C language] storage of shaping data](/img/50/5454826da9a671fff0138388d23469.png)






