检测照片中发票/收据/纸张角落的最佳方法是什么?在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
我正在使用graphviz(点)生成您可以在下面看到的图形.左下角的节点(红色椭圆)因其边缘穿过相邻节点的几个边缘而引起烦恼.有没有办法将节点放置到某个区域?
谢谢你的想法

我正在使用尺寸为3x3的索贝尔滤波器来计算图像导数.看一下互联网上的一些文章,似乎sobel过滤器的大小为5x5和7x7的内核也很常见,但我无法找到它们的内核值.
有人可以让我知道尺寸为5x5和7x7的sobel滤波器的内核值吗?此外,如果有人可以共享一个方法来生成内核值,那将非常有用.
提前致谢.
我已经在Python中训练了一个分类器,用于将单元格图像中的像素分类为边缘或非边缘.我已经成功地在一些图像数据集上使用它,但是遇到了这个特定数据集的问题,即使对人眼来说也是如此.我不知道任何可以准确分割它的现有自动化技术.
预测后,我得到以下图像:

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

和原始图像:

和连续概率图:

python opencv image-processing edge-detection image-segmentation
我有一个任务来实现Sobel滤波器,正如你所知,它是一个用于边缘检测的图像处理滤波器.但不幸的是,我没有图像处理领域的经验,我甚至不知道图像在计算机中的表现方式.完全没有这个领域的知识.
我已经阅读了一些论文和PDF,但他们关注的很多主题我认为我可能不需要它们来完成我的任务.
我很乐意知道您的建议,或者是否有任何特定的论文,PDF,教程或快速指南.
谢谢
编辑:
谢谢大家:)我们的工作成果可以从这里下载.
对于图像导数计算,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倍?
我搜索了我的问题,没有找到任何可以说服我的答案.请帮我.
基本上我的目标是实时改变油漆应用的物体颜色.为了实现这一目标,我遵循以下概念:
canny()方法找到了对象.findContours()边缘检测.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) 我写了一些代码,使用OpenCV库来检测草地上画的白线.我需要某人对我使用的方法的看法(因为我确信有比我更好的方法).此外,我得到的结果不如我预期的好,因为图像中的微小变化需要调整参数(我需要对固定参数进行操作).
到目前为止我的方法:
我应该更改过滤器的顺序吗?
PS我不太关心处理能力; 我正在GPU B上运行HoughLinesP-)
另外,这是一个示例图像:

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

任何帮助或指导将不胜感激!我只是不知道如何改进它!
更新
根据所选答案使用非常快速的骨架实现(使用TONS of blur)后,我得到了:

opencv image-processing edge-detection feature-detection hough-transform
我是图像处理的新手,我正在研究文档图像中的线条.我读了霍夫线变换的理论,但我不明白为什么我必须在使用opencv中的函数之前使用Canny,就像在许多教程中说的那样.在这种情况下找到边缘有什么意义?事实是,如果我在HoughLines()之前不使用Canny或阈值,结果将非常混乱.我希望有人能为我解释原因.
我读过的2个教程:
我是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并勾画它.
原始图片:
