前言:

书到用时方恨少

正文:

边缘提取技术一直都有接触,最通用的莫过于拉普拉斯,sobel几个算子,两个算子都可通过简单的模板运算进行,而现在比较好的一个边缘提取技术是canny,文章中我是用的canny函数参考:https://github.com/azikk/canny-with-CImg 不再另加描述。

需要注意的是↑这个算法计算过后的边缘特征图片的大小常和宽都-6,减去了中间sobel滤波器的大小。

使用边缘提取技术因为噪声、提取函数本身缺陷等原因,可能出现离散的不连续的点,而不是一条连贯的线,这时候我们可以选取hough变换找到这些不连贯的点组成的直线的方程,从而将其连贯的在画布上表示。

这两个技术单独说起来都比较简单,然而当我们真正拿到一张图片(手机拍摄)去做边缘提取的时候就需要不断思考。

首先给出其中一个例子:

这里拍的是一张平放在桌面的纸,我们的目标是提取出纸张的边缘。

一开始我直接使用canny直接提取边缘↓

可以看到canny对边缘提取信息的效果非常好,放大图片的话全部文字基本都是清晰的,然而也有很多噪声引入。

一开始我考虑在canny后使用形态学的腐蚀和膨胀解决噪声点,不过结果不太理想。以下是使用3x3的矩阵,如果矩阵覆盖的范围内特征点小于等于三,就做腐蚀,之后膨胀后的结果。

可以看到噪声大部分的除去都做到了,但是下面的边缘也被大面积腐蚀掉。如果图片边缘提取出来的结果比较稀疏稍,那么就可能四条边缘都被大比例的腐蚀掉,这样结果就十分糟糕。

所以后来我放弃了先提取边缘后使用形态学腐蚀和膨胀除去噪声的方式,我直接把彩色图片转灰度图,然后使用灰度图的去噪工具(中值、均值滤波)先去掉部分噪声,之后使用canny提取边缘。

这样效果就比较好。

 

这是另一张图片的两种方式处理的效果对比,可以看到基本没有噪声点而且保留了边缘。

hough变换是一个常用的直线、曲线提取技术,核心思想是两个空间平面的互相转换,他的特性网上诉说的有很多,具体可以参考详细说hough技术的另一篇博客:【待写】

然而处理图片的时候发现不论阈值如何选择,对于上面的图片,相对接近垂直的线条总是不能表示出来。经过调查发现这是因为我的canny有缺陷,较为垂直的线条只能出来零散的点,而偏横着的线就比较连贯。

+CIMG+彩色图片边缘提取实验记录_canny/hough transfrom的更多相关文章

  1. 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

      分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...

  2. fcn+caffe+siftflow实验记录

    环境搭建: vs2013,编译caffe工程,cuda8.0,cudnn5.1,python2.7. 还需要安装python的一些包.Numpy+mkl  scipy  matplotlib  sci ...

  3. case7 淋巴瘤子类分类实验记录

    case7 淋巴瘤子类分类实验记录 简介 分类问题:3分类 (identifying three sub-types of lymphoma: Chronic Lymphocytic Leukemia ...

  4. 实验记录:Oracle redo logfile的resize过程

    实验记录:Oracle redo logfile的resize过程. 实验环境:RHEL 6.4 + Oracle 11.2.0.3 单实例 文件系统 实验目的:本实验是修改redo logfile的 ...

  5. c# winform 把彩色图片转换为灰色的图片,变灰,灰度图片,速度很快,safe,unsafe

    把彩色图片转换为灰色的图片,直接用.net接口遍历每个像素点转换的效率非常低,800K的图片65万像素我的电脑要用5分钟,而用了unsafe,速度提高了几千倍,同样的图片只用了0.几秒 附一个常用的遍 ...

  6. 纠错:基于FPGA串口发送彩色图片数据至VGA显示

    今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...

  7. 使用Scapy向Mininet交换机注入流量 实验记录

    使用Scapy向Mininet交换机注入流量 实验记录 用Python脚本及Scapy库写了一个简单的流量生成脚本,并打算使用该脚本往Mininet中的OpenvSwitch交换机注入流量.拓扑图如下 ...

  8. 【转载】 opencv, PIL.Image的彩色图片维度 && caffe和pytorch的矩阵维度

    原文地址: https://blog.csdn.net/u011668104/article/details/82718375 ------------------------------------ ...

  9. 动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView

    动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView 效果如下: BlackAndWhiteView.h 与 BlackAndWhiteView.m // // BlackAndWhi ...

随机推荐

  1. 24 margin的用法

    margin塌陷问题 当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: html结构: <div ...

  2. 曹工说Tomcat1:从XML解析说起

    一.前言 第一次被人喊曹工,我相当诧异,那是有点久的事情了,楼主13年校招进华为,14年在东莞出差,给东莞移动的通信设备进行版本更新.他们那边的一个小伙子来接我的时候,这么叫我的,刚听到的时候,心里一 ...

  3. [乐意黎原创]Centos 7里apache(httpd)自启动

    最近,Aerchi在折腾 ECS服务器 (Centos 7),每次重启后都要手动开启apache服务,好繁琐. 仔细研究了下:Apache 的服务第一.启动.终止.重启systemctl start ...

  4. K Balanced Teams CodeForces - 1133E (Dp)

    题意: 给出 n 个数,选取其中若干个数分别组成至多 k 组,要求每组内最大值与最小值的差值不超过5,求最后被选上的总人数. 题解: 将a[1∼n] 从小到大排序, f[i][j] 表示到第 i 个数 ...

  5. POJ 3581:Sequence(后缀数组)

    题目链接 题意 给出n个数字的序列,现在让你分成三段,使得每一段翻转之后拼接起来的序列字典序最小.保证第一个数是序列中最大的数. 例如样例是{10, 1, 2, 3, 4},分成{1, 10}, {2 ...

  6. HDU 6181:Two Paths(A* + SPFA)

    题目链接 题意 给出n个点m条边的无向图,求次短路. 思路 和 POJ 2449 类似,只不过大小要开成long long. #include <bits/stdc++.h> using ...

  7. django基础知识之HTML转义:

    HTML转义 Django对字符串进行自动HTML转义,如在模板中输出如下值: 视图代码: def index(request): return render(request, 'temtest/in ...

  8. scrapy基础知识之防止爬虫被反的几个策略::

    动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息) 禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies,有些网 ...

  9. 用jQuery做定位元素,做自动化测试你尝试过吗

    一.前言 元素定位可以说是学自动化测试中必会技能之一,也可以说是通往自动化之路的开门钥匙. 就元素定位方法,除了我们常用并熟知的8种元素定位方法之外,还有一种定位方法可以说是一种特殊的存在,那就是JQ ...

  10. C# 使用Quartz简单实例以及备忘

    一.导入NuGet  二.创建一个类并实现接口Ijob,并实现该接口中的方法. using Buday.Gold.Cusumer.Lib; using Quartz; using System; us ...