Zernike矩之边缘检测(附源码)

33 篇文章 14 订阅
16 篇文章 1 订阅

这一篇博文将讨论Zernike矩在边缘检测中的应用,关于Zernike矩的基本概念,可以参看Zernike矩之图像重建(附源码


源码下载

参考:

[4] Ghosal S, Mehrotra R. Orthogonal moment operators for subpixel edge detection[J]. Pattern recognition,
1993, 26(2): 295-306.


下面是一个基于9×9 Zernike边缘检测代码示例,使用Python和OpenCV库: ```python import cv2 import numpy as np from skimage.measure import moments_central, moments_normalized def calculate_zernike_moments(image): # 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 计算二值化图像 _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 获取图像的轮廓 contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 提取最大轮廓 contour = max(contours, key=cv2.contourArea) # 计算中心点坐标 M = cv2.moments(contour) cX = int(M["m10"] / M["m00"]) cY = int(M["m01"] / M["m00"]) # 将轮廓点坐标减去中心点 centered_contour = contour - [cX, cY] # 计算归一化Zernike zernike_moments = [] for n in range(9): for m in range(n + 1): if (n - m) % 2 == 0: p = n - m q = n + m cm = moments_central(centered_contour, p, q) nm = moments_normalized(cm, p, q) zernike_moments.append(nm) return zernike_moments # 在此处加载图像 image = cv2.imread('image.jpg') # 计算Zernike zernike_moments = calculate_zernike_moments(image) # 打印Zernike print("Zernike Moments:", zernike_moments) ``` 这段代码首先将图像转换为灰度图像,然后使用二值化方法将图像转换为二值图像。接下来,通过找到最大轮廓并计算其中心点坐标,将轮廓点坐标减去中心点,得到相对于中心点的轮廓。然后,使用`moments_central`和`moments_normalized`函数计算归一化的Zernike。最后,将计算得到的Zernike打印出来。 请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体需求进行进一步的处理和优化。另外,该代码适用于提取图像中的单个边缘,如果需要提取多个边缘,可以在循环中对每个边缘进行处理。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聚沙塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值