sobel

cv2小记——图像梯度

99封情书 提交于 2020-02-04 06:25:58
# coding: utf-8 # !/usr/bin/python """ @File : 图像梯度.py @Author : jiaming @Modify Time: 2020/2/3 12:13 @Contact : https://blog.csdn.net/weixin_39541632 @Version : 1.0 @Desciption : 图像梯度、图像边界 cv2.Sobel() cv2.Schar() cv2.Laplacian() """ import os import sys import numpy as np import cv2 import pprint from matplotlib import pyplot as plt rawPath = os . path . abspath ( __file__ ) currentFile = os . path . basename ( sys . argv [ 0 ] ) dataPath = rawPath [ : rawPath . find ( currentFile ) ] + r 'static\\' """ OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel、 Scharr、 Laplacian """ """ Sobel 算子和 Scharr 算子 Sobel

边缘检测之Sobel检测算子

廉价感情. 提交于 2020-02-02 02:21:21
在讨论边缘算子之前,首先给出一些术语的定义: (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 (2)边缘点:图像中具有坐标[x,y],且处在强度显著变化的位置上的点。 (3)边缘段:对应于边缘点坐标[x,y]及其方位 ,边缘的方位可能是梯度角。 二、Sobel算子的基本原理 Sobel算子是一阶导数的边缘检测算子,在算法实现过程中,通过3×3模板作为核与图像中的每个像素点做卷积和运算 ,然后选取合适的阈值以提取边缘。 一个特殊卷积所实现的功能是由卷积核的形式决定的。这个核本质上是一个大小固定、由数值参数构成的数组,数组的参考点(anchor point)通常位于数组的中心。数组的大小成为核支撑。单就技术而言,核支撑实际上仅仅由核数组的非0部分组成。对图像的卷积,首先将核的参考点定位到图像的第一个像素点,核的其余元素覆盖图像中其相对应的局部像素点。对于每一个核点,我们可以得到这个点的核值以及图像中相应图像点的值,将这些值相乘并求和,并将这个结果放在与输入图像参考点所相对应的位置。通过在整个图像上扫描卷积核,对图像的每个点重复此操作。 索贝尔算子 (Sobel operator)主要用作边缘检测,在技术上,它是一阶离散性差分算子,用来运算图像亮度函数的灰度值近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量

opencv python:Canny边缘提取

陌路散爱 提交于 2020-01-31 01:37:09
Canny是边缘提取算法,在1986年提出的 是一个很好的边缘检测器 Canny算法介绍 非最大信号抑制: 高低阈值连接: example import cv2 as cv import numpy as np # canny运算步骤:5步 # 1. 高斯模糊 - GaussianBlur # 2. 灰度转换 - cvtColor # 3. 计算梯度 - Sobel/Scharr # 4. 非极大值抑制 # 5. 高低阈值输出二值图像 # 非极大值抑制: # 算法使用一个3×3邻域作用在幅值阵列M[i,j]的所有点上; # 每一个点上,邻域的中心像素M[i,j]与沿着梯度线的两个元素进行比较, # 其中梯度线是由邻域的中心点处的扇区值ζ[i,j]给出。 # 如果在邻域中心点处的幅值M[i,j]不比梯度线方向上的两个相邻点幅值大,则M[i,j]赋值为零,否则维持原值; # 此过程可以把M[i,j]宽屋脊带细化成只有一个像素点宽,即保留屋脊的高度值。 # 高低阈值连接 # T1,T2为阈值,凡是高于T2的都保留,凡是低于T1的都丢弃 # 从高于T2的像素出发,凡是大于T1而且相互连接的都保留。最终得到一个输出二值图像 # 推荐高低阈值比值为T2:T1 = 3:1/2:1,其中T2高阈值,T1低阈值 def edge_demo(image): blurred = cv

基于sobel算子的边缘检测 (python实现)

巧了我就是萌 提交于 2020-01-28 05:17:09
算子 (Operator)   在图像处理中,边缘检测是不可分割的一个组成部分,而算子,可以看作是边缘检测的一个媒介。像我们这种学EE的,算子就好比是一个巴特沃夫滤波器,滤掉我们不想要的,留下我们所需要的;又像是我们小时候看到的筛米的米筛子,那时候家里吃的米掺杂着许多“奇怪的”东西,小石砾、麦穗等等,不像现在买来的大米都是机器为我们筛好的,基本是很少能在吃米饭时牙齿突然咔嚓一下,当时确是蛮痛苦的。   在本篇文章中用的是Sobel算子,是使用两个与原始图像卷积的 3×3内核 来计算导数的近似值-一个用于水平变化,一个用于垂直变化。   如果我们将 A 定义为源图像,并且 G x G_x G x ​ 和 G y G_y G y ​ 是两个图像,每个点分别包含垂直和水平导数近似值,则计算如下: G x = [ − 1 0 + 1 − 2 0 + 2 − 1 0 + 1 ] ∗ A G y = [ − 1 − 2 − 1 0 0 0 + 1 + 2 + 1 ] ∗ A G_x =\begin{bmatrix} -1 & 0 & +1\\ -2 & 0 & +2\\ -1 & 0 & +1\\ \end{bmatrix} * A\quad\quad\quad G_y = \begin{bmatrix} -1 & -2 & -1\\ 0 & 0 & 0\\ +1 & +2 & +1\\

图像增强算法

旧时模样 提交于 2020-01-25 09:33:35
图像增强 图像增强算法概述 图像增强的目的是改善图像的视觉效果或使图像更适合于人或机器的分析处理。通过图像增强可以减少图像噪声,提高目标与背景的对比度,亦可以强调或抑制图像中的某些细节。例如,消除照片中的划痕,改善光照不均匀的图像,突出目标的边缘等。根据处理的空间可以将图像增强分为空域法和频域法,前者直接在图像的空间域(或图像空间)中对像素进行处理,后者在图像的变换域(即频域)内简介处理,然后经逆变换获得增强图像。空域增强可以分为点处理和区处理,频域增强可以分为低通滤波,高通滤波,带通滤波和同态滤波。本文主要介绍的是空域法。 直方图均衡化和规定化 直方图均衡化基本思想 直方图均衡化的基本思想是把原始图像的直方图变换为均匀分布的形式,从而增强图像灰度的变化范围,以达到增强图像对比度的效果。经过均衡化处理的图像,其灰度级出现的概率相同,此时图像的熵最大,图像所包含的信息量最大。 均衡化的详细原理 直方图规定化基本思想 直方图均衡化能够增强整个图像的对比度,但增强效果不易控制,处理得到的是全局均衡化的直方图。然后实际应用中可能希望将直方图变换为某个特定的形状(规定的直方图),从而有选择地增强某个灰度范围内的对比度,这种方法就称为直方图规定化。直方图规定化可以借助直方图均衡化来实现。 任意两幅灰度图像,显示它们的直方图,并将其中一幅的直方图传递给另一个图像,显示传递后的图像及其直方图。

图像梯度运算-Sobel算子

怎甘沉沦 提交于 2020-01-23 20:30:42
1.cv2.Sobel(src, ddepth, dx, dy, ksize) 进行sobel算子计算 参数说明:src表示当前图片,ddepth表示图片深度,这里使用cv2.CV_64F使得结果可以是负值, dx表示x轴方向,dy表示y轴方向, ksize表示移动方框的大小 2.cv2.convertScalerAbs(src) 将像素点进行绝对值计算 参数说明: src表示当前图片 sobel算子:分为x轴方向和y轴方向上的,x轴方向上的算子如图中的Gx,将sober算子在图中进行平移,当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点,y轴方向的算子如Gy, 对于x轴方向上,即左右两边的比较, 计算方程为:x轴: p3 - p1 + 2 * p6 - 2 * p4 + p9 - p7, 右边的像素值减去左边的像素值 代码: 第一步:载入原始图片 第二步:使用cv2.Sobel(src, cv2.CV_64F, 1, 0, ksize=3) 对x轴方向进行sobel算子相乘操作 第三步:由于会出现负值的情况,因此使用cv2.convertScalerAbs() 转换为绝对值的形式 第四步:计算y轴方向上的sobel算子 第五步:使用cv2.addWeighted

OpenCV python 图像梯度--sobel图像处理

你说的曾经没有我的故事 提交于 2020-01-13 04:37:53
OpenCV python 图像梯度–sobel图像处理 处理原图:[source.jpg] import cv2 def main ( ) : # 1.导入图片 img_src = cv2 . imread ( "source.jpg" ) # 2.执行sobel算法1 img_sobel_64x = cv2 . Sobel ( img_src , cv2 . CV_64F , 0 , 1 ) img_sobel_64y = cv2 . Sobel ( img_src , cv2 . CV_64F , 1 , 0 ) img_sobel_x = cv2 . convertScaleAbs ( img_sobel_64x ) img_sobel_y = cv2 . convertScaleAbs ( img_sobel_64y ) img_sobel = cv2 . addWeighted ( img_sobel_x , 0.5 , img_sobel_y , 0.5 , 0 ) # 2.执行sobel算法2 img_sobelxy_11 = cv2 . Sobel ( img_src , cv2 . CV_64F , 1 , 1 ) img_sobelxy_11 = cv2 . convertScaleAbs ( img_sobelxy_11 ) # 3.显示图片 cv2 .

[小脚本] 可视化图片梯度方向

此生再无相见时 提交于 2019-12-26 10:08:32
大致就是算出梯度, 然后利用直线的变换表示梯度的方向 img = cv . imread ( "tempdir/DoG.png" ) #img = cv.imread("tempdir/robot.jpg") gray_blur = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY ) # 3x3 sobel filters for edge detection sobel_x = np . array ( [ [ - 1 , 0 , 1 ] , [ - 2 , 0 , 2 ] , [ - 1 , 0 , 1 ] ] ) sobel_y = np . array ( [ [ - 1 , - 2 , - 1 ] , [ 0 , 0 , 0 ] , [ 1 , 2 , 1 ] ] ) # Filter the blurred grayscale images using filter2D filtered_blurred_x = cv2 . filter2D ( gray_blur , cv2 . CV_32F , sobel_x ) filtered_blurred_y = cv2 . filter2D ( gray_blur , cv2 . CV_32F , sobel_y ) # Compute the orientation of the

彻底理解数字图像处理中的卷积-以Sobel算子为例

回眸只為那壹抹淺笑 提交于 2019-12-26 09:04:55
彻底理解数字图像处理中的卷积-以Sobel算子为例 作者:FreeBlues 修订记录 - 2016.08.04 初稿完成 概述 卷积 在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨论卷积在数字图像处理中的应用. 在数字图像处理中, 有一种基本的处理方法: 线性滤波 . 待处理的平面数字图像可被看做一个大矩阵, 图像的每个像素对应着矩阵的每个元素, 假设我们平面的分辨率是 1024*768 , 那么对应的大矩阵的 行数 = 1024 , 列数 = 768 . 用于滤波的是一个滤波器小矩阵(也叫 卷积核 ), 滤波器小矩阵一般是个方阵, 也就是 行数 和 列数 相同, 比如常见的用于边缘检测的 Sobel 算子 就是两个 3*3 的小矩阵. 进行滤波就是对于大矩阵中的每个像素, 计算它周围像素和滤波器矩阵对应位置元素的乘积, 然后把结果相加到一起, 最终得到的值就作为该像素的新值, 这样就完成了一次滤波. 上面的处理过程可以参考这个示意图: 图像卷积计算示意图: 对图像大矩阵和滤波小矩阵对应位置元素相乘再求和的操作就叫 卷积 ( Convolution )或 协相关 ( Correlation ). 协相关 ( Correlation )和 卷积 ( Convolution )很类似, 两者唯一的差别就是 卷积 在计算前需要翻转 卷积核 , 而 协相关

How to improve the efficiency of a sobel edge detector

a 夏天 提交于 2019-12-23 05:40:09
问题 I am writing a computer vision library from scratch in Python to work with a rpi camera. At the moment, I have implemented conversion to greyscale and some other basic img operations which both run relatively fast on my model B rpi3 . However, my edge detection function using the sobel operator (wikipedia description) is much slower than the other functions although it does work. Here it is: def sobel(img): xKernel = np.array([[-1,0,1],[-2,0,2],[-1,0,1]]) yKernel = np.array([[-1,-2,-1],[0,0,0