问题标签 [sobel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1056 浏览

c++ - Canny 的 OpenCL 内核

我正在尝试以非常简化和简单的方式Canny Edge Detection使用OpenCL 内核来实现。

我正在使用原始SobelFilter内核来执行非最大抑制和阈值处理等步骤。

但是我对达到像素并对其进行数学计算感到迷茫:

你能给我一些想法或展示简单的例子来实现这一点吗?将不胜感激。问候。

0 投票
0 回答
587 浏览

c - Sobel 滤波器(OpenMP 实现)

我正在尝试在 C 中实现 Sobel 滤波器的并行化 + 矢量化版本,其中 OpenMP 编译指示用于并行化,#pragma simd 用于矢量化。我的输入是 1024 x 1024 的 .pgm 图像。我使用英特尔编译器在 Xeon Knights Landing 处理器上使用以下命令进行编译:

所以我在一般代码中面临的问题是:

a) 我什么时候并行化,什么时候向量化。我有一个由四个 for 循环组成的嵌套 for 循环 - > 我应该并行化还是矢量化这段代码

b) 我的 'min' 和 'max' 值是错误的。它们都是共享变量,因此容易出现竞争条件,所以我在它们周围添加了一个#pragma omp critical。但是,为这两个变量打印的值仍然是错误的,我不知道为什么。我什至在 print 语句之前添加了一个屏障,以确保所有线程在打印出最小值和最大值之前都通过该关键部分

c) #pragma omp critical 使我的程序非常非常慢。事实上,执行时间甚至比顺序运行时间还要长。有什么办法可以避免吗?

我的pgm.h

至强.c

谢谢

0 投票
1 回答
275 浏览

python - 过滤掉微弱的sobel过滤线?

我正在使用 skimage 创建与此类似的 sobel 过滤器图像... 在此处输入图像描述

我想知道有没有办法锐化这个索贝尔滤镜图像?就是说,去掉那些比较微弱的白线,比如气球后面的微弱线条?

我使用 Skimage 来做到这一点,但我可以访问其他东西,比如 OpenCV。

我的代码具体是...

0 投票
2 回答
7979 浏览

c++ - sobel 滤波器算法 (C++)(无库)

鉴于我访问图片像素的方法,我正在尝试将 sobel 过滤算法应用于给定图片(在这种情况下为灰度)。由于我以不使用库的方式访问它们,因此在给定这种方法的情况下,我无法弄清楚如何应用算法。代码的第一部分只是访问像素数据:

第1部分:

第二部分(sobel滤波器算法的实际应用):

非常感谢任何和所有帮助。

0 投票
2 回答
1330 浏览

convolution - sobel算子的工作原理

我读了https://en.wikipedia.org/wiki/Sobel_operator
说,我们想检测灰度图像中的水平边缘。
请注意 - 我已将矩阵写为行序列。

问题 1 ) 那么我应该采取 [1,0,-1; 2,0,-2 ; 1,0,-1](来自 G x = matrix * A of wiki link above)并将其与给定图像卷积。所以我会叠加 [-1,0,1 ; -2,0,2 ; -1,0,1](从矩阵的 180 度旋转获得)在每个像素上。
那正确吗 ?

问题 2)假设图像是 [a,b,c;d,X,f;g,h,i] 那么我将用 -a+c-2d+2f-g+i=Y 替换像素 X 。如果 Y 结果为负数怎么办?(像素值不能为负)。

问题 3)我可以通过仅查看应用 sobel 算子后获得的矩阵(不将该输出矩阵呈现为图像)来对图像的特定像素做出任何结论吗?

问题 4) 是否会根据使用的矩阵在输出图像中强调水平或垂直边缘,但不会同时强调两者?

谢谢。

0 投票
1 回答
1723 浏览

computer-vision - 我可以应用 sobel 算子的水平和垂直分量。然而,将它们结合起来会带来很多噪音

我正在尝试手动实现 sobel 运算符。这是我在 python 2.7 中的代码:

这是输出:

在此处输入图像描述

由于某种原因,算子的水平和垂直分量似乎有很好的效果,但组合图像有很多噪声。

我注意到当我执行 (imgv**2)**0.5 之类的操作时,也会引入大量噪音,即使理想情况下,我应该得到大致相同的图像。

有谁知道这里发生了什么?我应该以不同的方式组合图像吗?

0 投票
1 回答
450 浏览

opencv - 使用 filter2D (OpenCV) 进行 Sobel 算子时,平方会引入很多噪声

我正在尝试手动实现 sobel 运算符。

由于某种原因,算子的水平和垂直分量似乎有很好的效果,但组合图像有很多噪声。

我注意到当我执行 (imgv**2)**0.5 之类的操作时,也会引入大量噪音,即使理想情况下,我应该得到大致相同的图像。

有谁知道这里发生了什么?我应该以不同的方式组合图像吗?

这是我在python中的代码:

这是输出:

在此处输入图像描述

0 投票
3 回答
4370 浏览

python - 如何提高 sobel 边缘检测器的效率

我正在用 Python 从头开始​​编写一个计算机视觉库rpi来使用相机。目前,我已经实现了转换为greyscale和其他一些基本img操作,它们在我的model B rpi3.

sobel但是,我使用运算符(维基百科描述)的边缘检测功能比其他功能慢得多,尽管它确实有效。这里是:

greyscale并用这张猫的图像运行它:

灰阶猫

我得到了这个回复,这似乎是正确的:

猫边

该库的应用,特别是这个功能,是在一个下棋机器人上,边缘检测将有助于识别棋子的位置。问题是运行需要>15几秒钟,这是一个严重的问题,因为它会大大增加机器人移动所需的时间。

我的问题是:我怎样才能加快速度?

到目前为止,我已经尝试了几件事:

  1. 而不是squaringthen adding,然后square rootinggxgy值来获得总梯度,我只是sumabsolute。这大大提高了速度。

  2. 使用resolution来自rpi相机的较低图像。这显然是一种使这些操作运行得更快的简单方法,但它并不是真正可行的,因为它在最小可用分辨率下仍然非常慢,480x360从相机的最大值大幅降低3280x2464

  3. 编写嵌套的 for 循环来matrix convolutions代替np.sum(np.multiply(...)). 这最终稍微了一点,这让我感到惊讶,因为np.multiply返回了一个新数组,我认为使用loops. 我认为虽然这可能是由于numpy大部分是写入的,C或者新数组实际上没有存储,所以不需要很长时间,但我不太确定。

任何帮助将不胜感激 - 我认为改进的主要内容是 point 3,即matrix乘法和求和。

0 投票
0 回答
470 浏览

matlab - 通过 Sobel 和 Hough 变换从图像中检测道路

我已经完成了 Sobel 和 Hough 变换,但我找不到实际结果。我已经分享了我的代码和相应的输出。最终的输出并不令人满意。我需要 3 行;道路线和车道线也(在中间)。

输入图像

输入图像

检测线

在此处输入图像描述

0 投票
2 回答
257 浏览

c++ - 在c ++中执行sobel过滤函数时我做错了什么

这是我在灰度图像上执行的 sobel 过滤器功能。显然我的计算不正确,因为我不断得到全黑图像。我已经上交了这个项目,但结果不正确让我很困扰。