kirsch算子解释及python代码实现
2021/10/19 22:09:49
本文主要是介绍kirsch算子解释及python代码实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Kirsch算子是R.Kirsch提出来一种边缘检测算法,它采用8个模板对图像上
的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特
定边缘方向作出最大响应,运算中取最大值作为图像的边缘输出。
Kirsch算子特点
• 在计算边缘强度的同时可以得到边缘的方向
• 各方向间的夹角为45º
import cv2 as cv import matplotlib.pyplot as plt import numpy as np %matplotlib #kirsch算子 #自定义卷积核,八个方向 m1 = np.array([[5, 5, 5], [-3,0,-3], [-3,-3,-3]]) m2 = np.array([[-3, 5,5], [-3,0,5], [-3,-3,-3]]) m3 = np.array([[-3,-3,5], [-3,0,5], [-3,-3,5]]) m4 = np.array([[-3,-3,-3], [-3,0,5], [-3,5,5]]) m5 = np.array([[-3, -3, -3], [-3,0,-3], [5,5,5]]) m6 = np.array([[-3, -3, -3], [5,0,-3], [5,5,-3]]) m7 = np.array([[5, -3, -3], [5,0,-3], [5,-3,-3]]) m8 = np.array([[5, 5, -3], [5,0,-3], [-3,-3,-3]]) filterlist = [m1, m2, m3, m4, m5, m6, m7, m8]#将各个方向的卷积核放到一起便于统一操作 filtered_list = np.zeros((8, img_clean.shape[0], img_clean.shape[1]))#建立三维数组,第0维表示各个方向卷积后的值 for k in range(8) : out = cv.filter2D(img_clean, cv.CV_16S, filterlist[k])#自定义卷积,其实里面的步骤跟Sobel算子是差不多的 filtered_list[k] = out final = np.max(filtered_list, axis = 0)#取八个方向中的最大值,也就是取第0维的最大值作为图像该点,滤波之后的新的像素值 final[ np.where(final >= 255)] = 255#令像素值大于255的点等于255 final[ np.where(final < 255) ] = 0#令像素值小于255的点等于0 fig = plt.figure(figsize = (10, 5))#显示图像 fig.set(alpha = 0.2) plt.subplot2grid((1, 2), (0, 0)) plt.imshow(img_clean, 'gray') plt.subplot2grid((1, 2), (0, 1)) plt.imshow(final, 'gray')
这篇关于kirsch算子解释及python代码实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享