标签: edge-detection

检测照片中纸张角落的算法

检测照片中发票/收据/纸张角落的最佳方法是什么?在OCR之前,这将用于后续的透视校正.

我目前的做法是:

RGB>灰色>带阈值的Canny边缘检测>扩张(1)>移除小物体(6)>清除边界物体>根据凸面区域挑选大型博客.> [角落检测 - 未实施]

我不禁想到必须有一种更强大的"智能"/统计方法来处理这种类型的细分.我没有很多训练样例,但我可能会得到100张图像.

更广泛的背景:

我正在使用matlab进行原型设计,并计划在OpenCV和Tesserect-OCR中实现该系统.这是我需要为此特定应用程序解决的许多图像处理问题中的第一个.因此,我希望推出自己的解决方案并重新熟悉图像处理算法.

以下是我想要算法处理的一些示例图像:如果您想接受挑战,那么大图像位于http://madteckhead.com/tmp

案例1 http://madteckhead.com/tmp/IMG_0773_sml.jpg 案例2 http://madteckhead.com/tmp/IMG_0774_sml.jpg 案例3 http://madteckhead.com/tmp/IMG_0775_sml.jpg 案例4 http:/ /madteckhead.com/tmp/IMG_0776_sml.jpg

在最好的情况下,这给出:

案例1 - canny http://madteckhead.com/tmp/IMG_0773_canny.jpg 案例1 - post canny http://madteckhead.com/tmp/IMG_0773_postcanny.jpg 案例1 - 最大的博客http://madteckhead.com/tmp/ IMG_0773_blob.jpg

但是在其他情况下很容易失败:

案例2 - canny http://madteckhead.com/tmp/IMG_0774_canny.jpg 案例2 - post canny http://madteckhead.com/tmp/IMG_0774_postcanny.jpg 案例2 - 最大的博客http://madteckhead.com/tmp/ IMG_0774_blob.jpg

提前感谢所有伟大的想法!我喜欢!

编辑:霍夫变换进展

问:什么算法会聚集霍夫线找到角落?根据答案的建议,我能够使用Hough变换,拾取线条并过滤它们.我目前的做法相当粗糙.我已经假设发票总是小于15度,与图像不对齐.如果是这种情况,我最终得到合理的线条结果(见下文).但我不完全确定一个合适的算法来聚集线(或投票)来推断角落.霍夫线不连续.并且在嘈杂的图像中,可以存在平行线,因此需要与线原点度量的某种形式或距离.有任何想法吗?

案例1 http://madteckhead.com/tmp/IMG_0773_hough.jpg 案例2 http://madteckhead.com/tmp/IMG_0774_hough.jpg 案例3 http://madteckhead.com/tmp/IMG_0775_hough.jpg 案例4 http:/ /madteckhead.com/tmp/IMG_0776_hough.jpg

opencv image-processing edge-detection image-segmentation hough-transform

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

如何在graphviz中控制节点放置(即避免边缘交叉)

我正在使用graphviz(点)生成您可以在下面看到的图形.左下角的节点(红色椭圆)因其边缘穿过相邻节点的几个边缘而引起烦恼.有没有办法将节点放置到某个区域?

谢谢你的想法

边缘穿过其他几个边缘的图形

dot graphviz edge-detection

43
推荐指数
4
解决办法
4万
查看次数

Sobel滤芯大尺寸

我正在使用尺寸为3x3的索贝尔滤波器来计算图像导数.看一下互联网上的一些文章,似乎sobel过滤器的大小为5x5和7x7的内核也很常见,但我无法找到它们的内核值.

有人可以让我知道尺寸为5x5和7x7的sobel滤波器的内核值吗?此外,如果有人可以共享一个方法来生成内核值,那将非常有用.

提前致谢.

image-processing computer-vision edge-detection sobel

39
推荐指数
5
解决办法
3万
查看次数

基于边缘像素图的图像分割

我已经在Python中训练了一个分类器,用于将单元格图像中的像素分类为边缘或非边缘.我已经成功地在一些图像数据集上使用它,但是遇到了这个特定数据集的问题,即使对人眼来说也是如此.我不知道任何可以准确分割它的现有自动化技术.

预测后,我得到以下图像:

预测图像

我对图像处理相对较新,不确定如何继续实际获得细胞的最终分割.我简要地尝试了一些不同的技术 - 即霍夫圆形变换,水平集,骨架化,轮廓发现 - 但没有一个真正完成这个技巧.我只是没有正确调整参数,还是有更好的技术?

顺便提一下,这是正确的轮廓供参考.

正确的轮廓

和原始图像:

在此输入图像描述

和连续概率图:

连续概率图

python opencv image-processing edge-detection image-segmentation

35
推荐指数
2
解决办法
4901
查看次数

图像处理 - 实现Sobel滤波器

我有一个任务来实现Sobel滤波器,正如你所知,它是一个用于边缘检测的图像处理滤波器.但不幸的是,我没有图像处理领域的经验,我甚至不知道图像在计算机中的表现方式.完全没有这个领域的知识.

我已经阅读了一些论文和PDF,但他们关注的很多主题我认为我可能不需要它们来完成我的任务.

我很乐意知道您的建议,或者是否有任何特定的论文,PDF,教程或快速指南.

谢谢

编辑:

谢谢大家:)我们的工作成果可以从这里下载.

image-processing edge-detection

30
推荐指数
2
解决办法
7万
查看次数

为什么索贝尔算子看起来那样?

对于图像导数计算,Sobel算子看起来像这样:

[-1 0 1]
[-2 0 2]
[-1 0 1]
Run Code Online (Sandbox Code Playgroud)

我不太了解它的两件事,

1.为什么中心像素为0?我不能只使用下面的运算符,

[-1 1]
[-1 1]
[-1 1]
Run Code Online (Sandbox Code Playgroud)

2.为什么中心行是其他行的2倍?

我搜索了我的问题,没有找到任何可以说服我的答案.请帮我.

image-processing computer-vision edge-detection

29
推荐指数
2
解决办法
8011
查看次数

更改Android应用程序中对象的颜色

基本上我的目标是实时改变油漆应用的物体颜色.为了实现这一目标,我遵循以下概念:

  1. 我用这个canny()方法找到了对象.
  2. 使用findContours()边缘检测.
  3. 使用drawContours()用于着色的对象.

如果实现目标需要任何其他概念,请向我建议.我试过但没有得到精确的轮廓边缘.

原始输入:

原始图像

预期产量:

预期产出

当前输出:

得到输出

我得到灰度图像,但我想在rgb模式.

这是我的代码:

package com.example.imageprocess;

import java.util.ArrayList;
import java.util.List;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;

public class MainActivity extends Activity implements CvCameraViewListener2 {

        private Mat                    mRgba;
        private Mat                    mIntermediateMat;
        private Mat                    mGray;

        private CameraBridgeViewBase   mOpenCvCameraView;

        private BaseLoaderCallback  mLoaderCallback = …
Run Code Online (Sandbox Code Playgroud)

android opencv image-processing edge-detection

28
推荐指数
1
解决办法
3198
查看次数

检测图像中线条的好方法?

我写了一些代码,使用OpenCV库来检测草地上画的白线.我需要某人对我使用的方法的看法(因为我确信有比我更好的方法).此外,我得到的结果不如我预期的好,因为图像中的微小变化需要调整参数(我需要对固定参数进行操作).

到目前为止我的方法:

  1. 从网络摄像头抓取图像(显然变成灰度)
  2. 通过阈值过滤器运行它(使用THRESH_TO_ZERO模式,它将任何像素都归零阈值以下).
  3. 模糊图像
  4. 通过侵蚀过滤器运行它
  5. 通过Canny边缘探测器运行它
  6. 最后,拍摄此处理后的图像并使用概率Hough变换HoughLinesP查找线条

我应该更改过滤器的顺序吗?

PS我不太关心处理能力; 我正在GPU B上运行HoughLinesP-)

另外,这是一个示例图像: 原始图像

我得到的结果:与canny 与canny 没有canny(略微调整参数) 这次没精算

任何帮助或指导将不胜感激!我只是不知道如何改进它!

更新 根据所选答案使用非常快速的骨架实现(使用TONS of blur)后,我得到了: 有用!

opencv image-processing edge-detection feature-detection hough-transform

27
推荐指数
3
解决办法
3万
查看次数

在HoughLines(opencv)之前Canny有什么用?

我是图像处理的新手,我正在研究文档图像中的线条.我读了霍夫线变换的理论,但我不明白为什么我必须在使用opencv中的函数之前使用Canny,就像在许多教程中说的那样.在这种情况下找到边缘有什么意义?事实是,如果我在HoughLines()之前不使用Canny或阈值,结果将非常混乱.我希望有人能为我解释原因.

我读过的2个教程:

  1. Imgproc特征检测
  2. 霍夫线变换

opencv edge-detection hough-transform

25
推荐指数
3
解决办法
2万
查看次数

基于颜色的OpenCV Edge/Border检测

我是OpenCV的新手,很高兴能够学到更多东西.我一直在想着勾勒出边缘,形状的想法.

我遇到过这个代码(在iOS设备上运行),它使用了Canny.我希望能够以彩色渲染它,并圈出每个形状.有人能指出我正确的方向吗?

谢谢!

IplImage *grayImage = cvCreateImage(cvGetSize(iplImage), IPL_DEPTH_8U, 1);
cvCvtColor(iplImage, grayImage, CV_BGRA2GRAY);
cvReleaseImage(&iplImage);

IplImage* img_blur = cvCreateImage( cvGetSize( grayImage ), grayImage->depth, 1);
cvSmooth(grayImage, img_blur, CV_BLUR, 3, 0, 0, 0);
cvReleaseImage(&grayImage);

IplImage* img_canny = cvCreateImage( cvGetSize( img_blur ), img_blur->depth, 1);
cvCanny( img_blur, img_canny, 10, 100, 3 );
cvReleaseImage(&img_blur);

cvNot(img_canny, img_canny);
Run Code Online (Sandbox Code Playgroud)

例如可能是这些汉堡肉饼.OpenCV会检测到patty并勾画它.在此输入图像描述

原始图片:

在此输入图像描述

c++ opencv edge-detection

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