sobel

OpenCV's Sobel filter - why does it look so bad, especially compared to Gimp?

梦想的初衷 提交于 2019-12-04 23:34:09
问题 I'm trying to rebuild some preprocessing I have done before in Gimp, using OpenCV. The first stage is a Sobel filter for edge detection. It works very well in Gimp: Now here is my attempt with OpenCV: opencv_imgproc.Sobel(/* src = */ scaled, /* dst = */ sobel, /* ddepth = */ opencv_core.CV_32F, /* dx = */ 1, /* dy = */ 1, /* ksize = */ 5, /* scale = */ 0.25, /* delta = */ 0.0, /* borderType = */ opencv_core.BORDER_REPLICATE) It looks very bad, basically highlighting points instead of contours

opencv边缘检测

匿名 (未验证) 提交于 2019-12-03 00:12:02
比如有一幅图,图里面有一条线,左边很亮,右边很暗,那人眼就很容易识别这条线作为边缘.也就是 像素的灰度值快速变化的地方 . 对于f(t),其导数f'(t)反映了每一处的变化趋势.在变化最快的位置其导数最大. sobel算子的思路就是模拟求一阶导数. sobel算子是一个离散差分算子.它计算图像像素点亮度值的近似梯度. 图像是二维的,即沿着宽度/高度两个方向. 我们使用两个卷积核对原图像进行处理: 水平方向 很好理解,原始像素灰度值-->(右边像素值-左边像素值),反映了水平方向的变化情况. 垂直方向 这样的话,我们就得到了两个新的矩阵,分别反映了每一点像素在水平方向上的亮度变化情况和在垂直方向上的亮度变换情况. 综合考虑这两个方向的变化 ,我们使用 反映某个像素的梯度变化情况. 有时候为了简单起见,也直接用绝对值相加替代. opencv里可以使用了如下的卷积核,可以"放大像素的变化情况". 可以参考这个函数 Scharr import cv2 as cv def test(): src = cv.imread("/home/sc/disk/keepgoing/opencv_test/sidetest.jpeg") src = cv.GaussianBlur(src, (3, 3), 0) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) grad

opencv学习笔记4 边缘检测

匿名 (未验证) 提交于 2019-12-03 00:03:02
一。边缘检测的一般步骤 1.滤波 2.增强 3.检测 二。canny void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize= 3, bool L2gradient= false ) 1 Mat src = imread ( "E:/test.jpg" ); 2 Mat blur , gray , edge ; 3 Mat dst ( src . rows , src . cols , src . type ()); 4 cvtColor ( src , gray , CV_BGR2GRAY ); //转换为灰度图 5 GaussianBlur ( gray , blur , Size ( 3 , 3 ), 0 , 0 ); //降噪 6 Canny ( blur , edge , 200 , 100 ); //边缘检测 7 dst = Scalar :: all ( 0 ); 8 src . copyTo ( dst , edge ); //edge作掩码将src拷贝到dst 9 imshow ( "src" , src ); 10 imshow ( "canny detect" , dst ); 11 waitKey (); 12

OpenCV(四)之图像梯度处理

匿名 (未验证) 提交于 2019-12-03 00:01:01
OpenCV(四)之图像梯度处理 Gradient processing系列 Gradient processing-Sobel算子 Gradient processing-Scharr算子 Gradient processing-Laplacian算子 Gradient processing-计算梯度计算的对比 Gradient processing系列 在这一节中,我分析了关于图像梯度处理的几个方法,分析原理,代码实现,并观察有何差异。 Gradient processing-Sobel算子 对于 x -导数,或对 y -导数进行转置。 该函数通过将图像与适当的内核进行卷积来计算图像导数: Sobel 算子结合了高斯平滑和微分,因此结果或多或少地抵抗噪声。 大多数情况下,使用( xorder = 1 , yorder = 0 , ksize = 3 )或( xorder = 0 , yorder = 1 , ksize = 3 ), 调用函数以计算第一个 x 或 y 图像导数。 第一种情况对应于以下内核: 第二种情况对应于以下内核: 参数 SRC 输入图像。 DST 输出与 src 相同大小和相同通道数的图像。 ddepth 输出图像深度,见# combinations ; 在 8 位输入图像的情况下,它将导致截断的导数。 DX 导数 x 的顺序。 DY 导数 y 的顺序。

Sobel算子

匿名 (未验证) 提交于 2019-12-02 23:57:01
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc, char** argv) { Mat src, dst; int ksize = 0; src = imread("L:/5.jpg"); if (!src.data) { printf("could not load image...\n"); return -1; } char INPUT_WIN[] = "input image"; char OUTPUT_WIN[] = "sobel-demo"; namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE); namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE); imshow(INPUT_WIN, src); GaussianBlur(src, dst, Size(3, 3), 0, 0); //高斯平滑,高斯滤波 Mat gray_src; cvtColor(dst, gray_src,CV_BGR2GRAY); imshow("gray image", gray_src); Mat xgrad, ygrad; Sobel(gray_src,

Sobel

折月煮酒 提交于 2019-12-02 19:47:04
https://blog.csdn.net/qq_37124237/article/details/82183177 void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy, int ksize, double scale, double delta, int borderType ) src 输入图像 dst 输出图像 the same size and the same number of channels as src . ddepth 输出图像深度,输入图像为CV_8U,sobel的结果一般为CV_16S dx order of the derivative x.: x导数的阶数??? (只能0、1、2) dy order of the derivative y.:y导数的阶数??? ksize size of the extended Sobel kernel; it must be 1, 3, 5, or 7. :差分算子的核大小 scale optional scale factor for the computed derivative values; by default, no scaling is applied :导数结果的比例系数 delta

Matlab: First derivative edge detection, about gradients

不打扰是莪最后的温柔 提交于 2019-12-02 03:15:05
I'm writing a program that asks the user to choose between Prewitt and Sobel image filters to detect edges of objects of an image. I must use their filter templates, not the edge function. The user also tells if he wants to detect 'horizontal', 'vertical' or 'diagonal' edges. My problem is theoretical rather than about programming. In my notes i've got that to compute the magnitude of the gradient at each pixel, it is often approximated as sqrt(Gx^2 + Gy^2) where Gx would be the vertical derivative and Gy the horizontal derivative. But what is the value of Gx if I only calculate the horizontal

OpenCV边缘检测

时光毁灭记忆、已成空白 提交于 2019-11-30 12:18:46
Series: OpenCV学习笔记 边缘检测 /* Author:Eajack Date:2017/8/9 Series:OpenCV笔记 Function:OpenCV边缘检测 Key Points: 1、Canny边缘检测步骤:原图转成灰度图 => blur降噪 => Canny边缘检测 => edge作为掩码 Canny(srcImg,edgeImg,double threshlod1,double threshold2) 2、Sobel算子边缘提取步骤: X方向梯度 => X方向梯度 => 整体方向梯度 [x,y] X : Sobel(srcImg,sobel_x,CV_16S,1,0,3,1,1,BORDER_DEFAULT); Y : Sobel(srcImg,sobel_y,CV_16S,0,1,3,1,1,BORDER_DEFAULT); addWeighted(abs_sobel_x,0.5,abs_sobel_y,0.5,0,sobel_dst); */ #include<stdio.h> #include<iostream> #include<vector> #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc

监控视频长度压缩算法

余生颓废 提交于 2019-11-30 03:26:50
帧差-> I-mean(I) -->openFilter -->medianFilter + Sobel --> psnr(sobel, black) 1. 帧差法+PSNR 缺点: 亮度剧烈变化检测失败, 人物静止时检测失败 2. 背景差分法+psnr 原图,背景图 该图误检为静帧 44 ---》代码加入 abs 并且高斯滤波核设置为3X3 然鹅 然并卵 ---》继续删除guassian滤波 然并卵 差分图如下 --》删除openfilter 一样 变成了43 来源: https://www.cnblogs.com/luoyinjie/p/11551724.html

边缘检测

会有一股神秘感。 提交于 2019-11-30 00:56:07
边缘就是图像上不同区域之间的交界处,就是灰度或者颜色变换很大的一系列的点。 在数学上我们判断一个点变换是否剧烈一般通过导数或者微分来判断。因为当斜率接近90度时,导数会趋近于无限大,所以我们一般采用微分的形式。dy/dx,当dx趋向于无限小,dy/dx 就是x在该函数上的导数,所以dy/dx就可以来近似导数。当我们固定dx,比较不同点的变化率时只用比较dy就好了,所以计算整幅图像的微分,dy的大小就是边缘的强弱了,我们也称之为梯度。 1.Prewitt算子 2.sobel算子 和Prewitt一样,Sobel算子也是用周围8个像素来估计中心像素的梯度,但是Sobel算子认为靠近中心像素的点应该给予更高的权重,所以Sobel算子把与中心像素4邻接的像素的权重设置为2或-2。如下图: 3.candy算子 使用高斯滤波器,以平滑图像,滤除噪声。 计算图像中每个像素点的梯度强度和方向(一般使用sobel算子)。 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应(细化边缘)。 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。 通过抑制孤立的弱边缘最终完成边缘检测。 4.Laplacian算子(拉普拉斯算子) 拉普拉斯算子采用的是二阶差分算子计算边缘的,就是对一阶差分再做一次差分。 f ’'(x, y) = -4 f