标签: edge-detection

适用于 Android 的 Canny 边缘检测器 -- 递归函数上的 StackOverflow

我正在开发适用于 Android 的增强现实应用程序。我正在实现 Tom Gibara 的精明边缘检测器类,并用 Bitmap 替换了 Android 不支持的 BufferedImage。

方法“跟随”(在下面发布)导致我出现 StackOverflow 错误。这是一个递归函数,但让我感到困惑的是,它会在设备上崩溃前正常工作大约 10-15 秒。

从 Google 看来,人们似乎已经在 J​​ava 中成功实现了这个类,但我想知道,无论出于何种原因,它在 Android 上都不起作用。Gibara 的代码指定它仅供单线程使用;这可能是问题的一部分吗?如果不是这样,我的错误对任何人来说都是显而易见的吗?

谢谢!

private void follow(int x1, int y1, int i1, int threshold) {  
    int x0 = x1 == 0 ? x1 : x1 - 1;  
    int x2 = x1 == width - 1 ? x1 : x1 + 1;  
    int y0 = y1 == 0 ? y1 : y1 - 1;  
    int y2 = y1 …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow android edge-detection

5
推荐指数
0
解决办法
3535
查看次数

MATLAB中的轮廓检测

我想了解这段代码:

d=edge(d,'canny',.6);
figure,
imshow(d,[])

ds = bwareaopen(d,40);
figure,
imshow(ds,[])

iout = d1;
BW=ds;

iout(:,:,1) = iout;
iout(:,:,2) = iout(:,:,1);
iout(:,:,3) = iout(:,:,1);
iout(:,:,2) = min(iout(:,:,2) + BW, 1.0);
iout(:,:,3) = min(iout(:,:,3) + BW, 1.0);
Run Code Online (Sandbox Code Playgroud)

据我所知,应用d了图像和精确探测器,忽略了40个像素.图像为灰度,轮廓添加到图像中.

你能解释下一行吗?这里使用了什么原理/算法?我遇到了麻烦,尤其是代码的轮廓检测部分.

matlab image-processing edge-detection

5
推荐指数
1
解决办法
2万
查看次数

检测图像中的U形边缘

我正试图从图像中检测指尖的位置.我已经能够在图像中裁剪出必须有指尖的区域,并使用Canny Edge Detector提取边缘.但是我被卡住了.由于我的项目描述说我无法使用肤色进行检测,因此无法找到手指的确切轮廓,并且必须尝试将指尖与边缘单独分开.现在我在想,因为手指有弧形拱形/字母U形,也许可以用于检测.但由于它必须是旋转/比例不变的,我到目前为止发现的大多数算法都不符合它.有没有人知道如何做到这一点?感谢任何响应的人! 在此输入图像描述

这是我现在的结果.我想在索引指尖或最高指尖周围放一个边界框,以最简单的方式.

c++ opencv image-processing pattern-matching edge-detection

5
推荐指数
1
解决办法
455
查看次数

不同边缘检测算法的优缺点是什么

有人可以描述不同的边缘检测算法来检测图像中的边缘及其用途的优缺点。我感兴趣的一些主要算法是:Sobel FuzzyLogic Canny

提前致谢

image-processing fuzzy-logic edge-detection canny-operator sobel

5
推荐指数
1
解决办法
2007
查看次数

CIImage(IOS):在单色滤镜之后添加3x3卷积以某种方式恢复颜色

我正在将ciimage转换为单色,使用CICrop进行剪裁并运行sobel来检测边缘,底部的#if部分用于显示结果

CIImage *ci = [[CIImage alloc] initWithCGImage:uiImage.CGImage];

CIImage *gray = [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues:
      @"inputImage", ci, @"inputColor", [[CIColor alloc] initWithColor:[UIColor whiteColor]],
      nil].outputImage;



CGRect rect = [ci extent];
rect.origin = CGPointZero;

CGRect cropRectLeft = CGRectMake(0, 0, rect.size.width * 0.2, rect.size.height);
CIVector *cropRect = [CIVector vectorWithX:rect.origin.x Y:rect.origin.y Z:rect.size.width* 0.2 W:rect.size.height];
CIImage *left = [gray imageByCroppingToRect:cropRectLeft];

CIFilter *cropFilter = [CIFilter filterWithName:@"CICrop"];

[cropFilter setValue:left forKey:@"inputImage"];
[cropFilter setValue:cropRect forKey:@"inputRectangle"];

// The sobel convoloution will produce an image that is 0.5,0.5,0.5,0.5 whereever the image is flat
// …
Run Code Online (Sandbox Code Playgroud)

edge-detection ios ciimage

5
推荐指数
1
解决办法
1497
查看次数

OCR 的字符重建和填充

我正在研究轮胎上的文本识别。为了使用 OCR,我必须首先获得清晰的二值图。

我已经处理了图像,文本出现边缘破损和不连续的情况。我已经在 MATLAB 中尝试过使用圆盘和线元素进行标准腐蚀/膨胀,但它并没有真正帮助。

Pr1-关于如何重建这些字符并填补字符笔划之间的空白的任何想法?

原图_highres 原始图像_lowRes 检测到精明的边缘

Pr2- 上面的图像分辨率更高,光照良好。但是,如果如下图所示,照明较差且分辨率相对较低,那么可行的处理选项是什么?

在此处输入图片说明

尝试的解决方案:

S1:这是对Spektre共享的处理过的图像应用中值滤波器的结果。为了去除噪声,我应用了中值滤波器 (5x5),随后使用线元素 (5,11) 进行图像膨胀。即使现在 OCR (Matlab 2014b) 也只能识别一些字符

无论如何,非常感谢到目前为止的建议。我仍然会等着看是否有人可以提出不同的建议,也许是开箱即用的:)。

在此处输入图片说明

Matlab 实现以下 Spektre 代码中的步骤的结果(没有笔画扩张(按 1、2、3、4 的顺序对角进行标准化:

在此处输入图片说明

并且阈值 tr0=400 和 tr1=180 以及归一化的角顺序 1,3,2,4 在此处输入图片说明

此致

瓦贾哈特

ocr matlab image-processing edge-detection

5
推荐指数
1
解决办法
3116
查看次数

低对比度分割深度图像

我试图从这张深度图像中分割手:

在此输入图像描述

我尝试过分水岭、区域增长、抓取,但都失败了,主要是因为没有明确的边缘。我也尝试锐化图像,但也没有给我带来好的结果。

c++ opencv computer-vision edge-detection image-segmentation

5
推荐指数
1
解决办法
776
查看次数

霍夫线变换 - 45 度角的伪影

我在 OpenCV (c++) 中实现了霍夫线变换,我在霍夫空间中得到了奇怪的工件。下图显示了霍夫空间。距离 rho 在行中描绘,而 180 列表示从 0 到 179 度的角度。如果放大第 45 和 135 列,您会看到一条垂直线,其中暗像素和亮像素交替出现。 http://imgur.com/NDtMn6S

对于更高的阈值,可以很好地检测到围栏的线条,但是当我降低阈值时,在最终图片中可以将伪影视为 45° 或 135° 旋转的线条: 检测到中等阈值的线条

起初我认为这是我实现霍夫线方法的错误,但使用 OpenCV 的霍夫线方法获得了中等阈值的类似线。使用 Canny 而不是 Sobel 时,我也遇到了同样的问题。

所以问题是:为什么我会得到这些文物,我该如何摆脱它们?我无法找到任何关于此的信息,任何帮助将不胜感激。

这是我与 OpenCV Hough Lines 方法一起使用的代码:

// read in input image and convert to grayscale
Mat frame = imread("fence.png", CV_LOAD_IMAGE_COLOR);
Mat final_out;
frame.copyTo(final_out);

Mat img, gx, gy, mag, angle;
cvtColor(frame, img, CV_BGR2GRAY);

// get the thresholded maggnitude image
Sobel(img, gx, CV_64F, 1, 0);
Sobel(img, gy, CV_64F, 0, 1);
cartToPolar(gx, gy, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv edge-detection hough-transform

5
推荐指数
1
解决办法
1441
查看次数

应用边缘检测后如何去除一些边缘?

我需要找到虹膜边缘,我使用的输入图像不是完全圆形的虹膜,有时它可能被眼睑覆盖.我找到了一篇期刊文章的摘要,发现虹膜甚至被眼睑覆盖.但是,我坚持其中一个步骤.再次,它因为只有摘要而我找不到那篇文章的全文.

这就是我被卡住的地方,我有一个图像,它已经被垂直索贝尔边缘检测暗示了.我有一个图像输入,这是图片:

输入图像

这是应用垂直边缘检测后的图片:

在此输入图像描述

我需要移除除虹膜边缘(红色边缘)以外的所有边缘.

在此输入图像描述

我的预期结果应该是这样的:

在此输入图像描述

注意:有些图像可能只有瞳孔的左边缘或右边缘,如上图所示,但有些图像可能有瞳孔的左右边缘.

在我看来,有两种方法可以获得优势.

  1. 移除水平边缘,因为瞳孔边缘有点垂直.但我不知道如何去除水平边缘,它不是真正的水平线条,其弯曲的水平线条.

  2. 找到图片中最长的边缘(我也不知道找到最长边的算法是什么).

哪一个是解决我问题的正确方法?或不是以上两种选择?

如果你知道找到非全圆形物体的方法,特别是对于虹膜,请告诉我,它使我的项目更容易.

image-processing edge-detection iris-recognition sobel

5
推荐指数
1
解决办法
538
查看次数

R 中的 Sobel 边缘检测器?

我正在做一个关于 Sobel 边缘检测的 R 作业。不幸的是,我遵循的视频教程使用 R 来完成所有其他任务,但切换到 python 进行图像处理 - 我猜测他没有找到任何有用的 R 包来进行图像卷积类型的工作(本教程来自去年)。我尝试过EBImagemagick(这个似乎是新的),但没有发现太多。这个神奇的小插图讨论了image_convolve('Sobel')(大约在页面的一半),但仅适用于垂直边缘,而不是水平边缘。有人可以推荐一些我可以使用的好材料吗?我对图像处理相当陌生。

更新:

我已经设法使用 magick 包(下面粘贴的代码)分别检测垂直和水平边缘,但不知道如何将它们组合起来生成单个图像

library(magick)

# get image
img <- image_read("https://www.r-project.org/logo/Rlogo.png")
print(image_info(img))

# define horizontal and vertical Sobel kernel
Shoriz <- matrix(c(1, 2, 1, 0, 0, 0, -1, -2, -1), nrow = 3)
Svert <- t(Shoriz)

# get horizontal and vertical edges
imgH <- image_convolve(img, Shoriz)
imgV <- image_convolve(img, Svert)

print(plot(as.raster(img)))     # view original image
print(plot(as.raster(imgH)))    # view horizontal …
Run Code Online (Sandbox Code Playgroud)

r image-processing edge-detection sobel

5
推荐指数
0
解决办法
2654
查看次数