问题标签 [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.
c++ - Canny 的 OpenCL 内核
我正在尝试以非常简化和简单的方式Canny Edge Detection
使用OpenCL 内核来实现。
我正在使用原始SobelFilter
内核来执行非最大抑制和阈值处理等步骤。
但是我对达到像素并对其进行数学计算感到迷茫:
你能给我一些想法或展示简单的例子来实现这一点吗?将不胜感激。问候。
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
谢谢
c++ - sobel 滤波器算法 (C++)(无库)
鉴于我访问图片像素的方法,我正在尝试将 sobel 过滤算法应用于给定图片(在这种情况下为灰度)。由于我以不使用库的方式访问它们,因此在给定这种方法的情况下,我无法弄清楚如何应用算法。代码的第一部分只是访问像素数据:
第1部分:
第二部分(sobel滤波器算法的实际应用):
非常感谢任何和所有帮助。
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) 是否会根据使用的矩阵在输出图像中强调水平或垂直边缘,但不会同时强调两者?
谢谢。
python - 如何提高 sobel 边缘检测器的效率
我正在用 Python 从头开始编写一个计算机视觉库rpi
来使用相机。目前,我已经实现了转换为greyscale
和其他一些基本img
操作,它们在我的model B
rpi3
.
sobel
但是,我使用运算符(维基百科描述)的边缘检测功能比其他功能慢得多,尽管它确实有效。这里是:
greyscale
并用这张猫的图像运行它:
我得到了这个回复,这似乎是正确的:
该库的应用,特别是这个功能,是在一个下棋机器人上,边缘检测将有助于识别棋子的位置。问题是运行需要>15
几秒钟,这是一个严重的问题,因为它会大大增加机器人移动所需的时间。
我的问题是:我怎样才能加快速度?
到目前为止,我已经尝试了几件事:
而不是
squaring
thenadding
,然后square rooting
是gx
和gy
值来获得总梯度,我只是sum
值absolute
。这大大提高了速度。使用
resolution
来自rpi
相机的较低图像。这显然是一种使这些操作运行得更快的简单方法,但它并不是真正可行的,因为它在最小可用分辨率下仍然非常慢,480x360
从相机的最大值大幅降低3280x2464
。编写嵌套的 for 循环来
matrix convolutions
代替np.sum(np.multiply(...))
. 这最终稍微慢了一点,这让我感到惊讶,因为np.multiply
返回了一个新数组,我认为使用loops
. 我认为虽然这可能是由于numpy
大部分是写入的,C
或者新数组实际上没有存储,所以不需要很长时间,但我不太确定。
任何帮助将不胜感激 - 我认为改进的主要内容是 point 3
,即matrix
乘法和求和。
c++ - 在c ++中执行sobel过滤函数时我做错了什么
这是我在灰度图像上执行的 sobel 过滤器功能。显然我的计算不正确,因为我不断得到全黑图像。我已经上交了这个项目,但结果不正确让我很困扰。