python+opencv图像处理(四十二)

Kirsch算子

1、Kirsch算子

Kirsch算子是R.Kirsch提出来一种边缘检测新算法,它采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方向作出最大响应,运算中取最大值作为图像的边缘输出。
Kirsch算子如下:

2、Kirsch算子具体实现

下图中,左图为原图,右图为经Kirsch算子检测后的边缘图。
其完整代码如下:

import cv2

import numpy as np

from matplotlib import pyplot as plt

#定义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]])

img = cv2.imread("E:\image\lena.jpg",0)

img = cv2.copyMakeBorder(img,1,1,1,1,borderType=cv2.BORDER_REPLICATE)

temp = list(range(8))

img1 = np.zeros(img.shape)

for i in range(1,img.shape[0]-1):

for j in range(1,img.shape[1]-1):

temp[0] = np.abs( ( np.dot( np.array([1,1,1]) , ( m1*img[i-1:i+2,j-1:j+2]) ) ).dot(np.array([[1],[1],[1]])))

temp[2] = np.abs( ( np.dot( np.array([1,1,1]) , ( m1*img[i-1:i+2,j-1:j+2]) ) ).dot(np.array([[1],[1],[1]])))

temp[3] = np.abs((np.dot(np.array([1, 1, 1]), (m3 * img[i - 1:i + 2, j - 1:j + 2]))).dot(np.array([[1],[1],[1]])))

temp[4] = np.abs((np.dot(np.array([1, 1, 1]), (m4 * img[i - 1:i + 2, j - 1:j + 2]))).dot(np.array([[1],[1],[1]])))

temp[5] = np.abs((np.dot(np.array([1, 1, 1]), (m5 * img[i - 1:i + 2, j - 1:j + 2]))).dot(np.array([[1],[1],[1]])))

temp[6] = np.abs((np.dot(np.array([1, 1, 1]), (m6 * img[i - 1:i + 2, j - 1:j + 2]))).dot(np.array([[1],[1],[1]])))

temp[7] = np.abs((np.dot(np.array([1, 1, 1]), (m7 * img[i - 1:i + 2, j - 1:j + 2]))).dot(np.array([[1],[1],[1]])))

temp[1] = np.abs((np.dot(np.array([1, 1, 1]), (m2 * img[i-1:i+2, j-1:j+2]))).dot(np.array([[1],[1],[1]])))

img1[i,j] = np.max(temp)

if img1[i, j] > 255:

img1[i, j] = 255

else:

img1[i, j] = 0

cv2.imshow("origin",img)

cv2.imshow("1",img1)

cv2.waitKey(0)

本篇参考自链接:

https://blog.csdn.net/weixin_44403952/article/details/90267123

(0)

相关推荐

  • 教AI做件简单的事:从零开始构建首个神经网络

    全文共2278字,预计学习时长6分钟 图源:Google 很长时间以来,我一直对构建神经网络跃跃欲试,现在终于有机会来研究它了.我想我并没有完全掌握神经网络背后的数学原理,所以先教人工智能做一些简单的 ...

  • 支持向量机(SVM)的约束和无约束优化、理论和实现

    优化是机器学习领域最有趣的主题之一.我们日常生活中遇到的大多数问题都是通过数值优化方法解决的.在这篇文章中,让我们研究一些基本的数值优化算法,以找到任意给定函数(这对于凸函数最有效)的局部最优解.让我 ...

  • 一个简单方法识别毛玻璃、高斯模糊

    作者:晟沚 前  言 本文主要推荐一种简单的方法识别带有毛玻璃.高斯模糊等效果的图片. 01 毛玻璃效果 毛玻璃效果的原理,即遍历每一个像素,随机选取这个像素周围的某一个像素,替换当前像素.可以使用o ...

  • python+opencv图像处理(十二)

    图像仿射变换和透视变换 天晴了...... 1.仿射变换 图像的仿射变换就是图像的旋转加上拉升,说直白点,就是把矩形变成平行四边形. 要把矩形变成平行四边行,只需要拉伸其四个角点就行了,事实上,只需要 ...

  • python+opencv图像处理(十四)

    图像直方图 1.灰度图像的直方图 灰度图像的直方图是灰度级和这种灰度级的概率之间关系的图形. 直接看图,下图中左侧是原图,右图为其直方图. 完整代码如下: import cv2 as cv impor ...

  • python+opencv图像处理(十九)

    视频的读入和显示 在图像处理中,视频处理是其中的重要一环,本篇介绍视频的读入和显示. 1.视频读入 Opencv中有自带的函数可以实现视频的读入和显示,代码如下: 视频其实也就是一帧一帧的图像,所以在 ...

  • python+opencv图像处理(十八)

    自适应直方图均衡 之前介绍的直方图均衡的方法是针对整幅图像来说的,也即是全局的直方图均衡化.全局的直方图均衡化会存在一些问题,比如因过度爆光而使得局部细节模糊等,如下图所示,左图是源图,右图是直方图均 ...

  • python+opencv图像处理(十五)

    直方图均衡 直方图均衡化是通过对图像的直方图进行修正来获得图像增强效果的方法,主要是进行对比度增强,就是让亮的更亮,暗的更亮. 1.灰度图像的直方图均衡 先上图看效果. 如图上标题所示,第一张是原图, ...

  • python+opencv图像处理(十)

    图像旋转 本篇主要利用opencv的转换函数warpAffine实现图像的平移和旋转. 1.图像旋转 图像旋转即是根据某个中心点进行旋转. 要进行旋转,要找到中心点,要知道旋转角度,opencv提供了 ...

  • python+opencv图像处理(二十四)

    多图像平均法 对于同一个场景拍摄的多张图像,一般情况下是相同的,但是在实际获取和传输图像的过程往往会发生图像失真,所得到图像和原始图像有某种程度的差别.这些都是因为有外界的噪声加入到图像中,因此在对采 ...

  • python+opencv图像处理(四十四)

    童年记忆中的爆米花,小时候只在过年的时候才能吃到,现在偶尔能在路边看到有在爆的,看到了总忍不住想买,虽然味道没什么变化,只是再吃不出来以前的幸福了. 长大了......心也大了...... 可是,实力 ...

  • python+opencv图像处理(四十)

    Sobel算子  开头来张帅哥...... ----------------------这是严谨的分割线-------------------------- 1.Sobel算子(索贝尔算子) Sobe ...