+CIMG+彩色图片边缘提取实验记录_canny/hough transfrom
前言:
书到用时方恨少
正文:
边缘提取技术一直都有接触,最通用的莫过于拉普拉斯,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的更多相关文章
- 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?
分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...
- fcn+caffe+siftflow实验记录
环境搭建: vs2013,编译caffe工程,cuda8.0,cudnn5.1,python2.7. 还需要安装python的一些包.Numpy+mkl scipy matplotlib sci ...
- case7 淋巴瘤子类分类实验记录
case7 淋巴瘤子类分类实验记录 简介 分类问题:3分类 (identifying three sub-types of lymphoma: Chronic Lymphocytic Leukemia ...
- 实验记录:Oracle redo logfile的resize过程
实验记录:Oracle redo logfile的resize过程. 实验环境:RHEL 6.4 + Oracle 11.2.0.3 单实例 文件系统 实验目的:本实验是修改redo logfile的 ...
- c# winform 把彩色图片转换为灰色的图片,变灰,灰度图片,速度很快,safe,unsafe
把彩色图片转换为灰色的图片,直接用.net接口遍历每个像素点转换的效率非常低,800K的图片65万像素我的电脑要用5分钟,而用了unsafe,速度提高了几千倍,同样的图片只用了0.几秒 附一个常用的遍 ...
- 纠错:基于FPGA串口发送彩色图片数据至VGA显示
今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...
- 使用Scapy向Mininet交换机注入流量 实验记录
使用Scapy向Mininet交换机注入流量 实验记录 用Python脚本及Scapy库写了一个简单的流量生成脚本,并打算使用该脚本往Mininet中的OpenvSwitch交换机注入流量.拓扑图如下 ...
- 【转载】 opencv, PIL.Image的彩色图片维度 && caffe和pytorch的矩阵维度
原文地址: https://blog.csdn.net/u011668104/article/details/82718375 ------------------------------------ ...
- 动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView 效果如下: BlackAndWhiteView.h 与 BlackAndWhiteView.m // // BlackAndWhi ...
随机推荐
- 浏览器中查看HTTP的头部文件
本文以chrome浏览器为例,来讲解下在浏览器中,如何查看http的头部文件. 1.打开chrome浏览器,输入地址,如下图所示. 2.鼠标右击,在右键菜单中选择[检查],如下图所示. 3.选择“Ne ...
- vue结合Ant Design实现后台系统的权限分配(支持无限子级嵌套)
最近公司的业务需要,要做一个后台管理系统的管理系统类似于这样子 功能需求如下: 左边是权限菜单,右边对应的是具体权限. 1.父级权限菜单选中,父级权限菜单的权限包括其中所有子级权限菜单的权限也要选中, ...
- Linux下Flume的安装部署
一.前置条件 Flume需要依赖JDK 1.8+,JDK安装方式见本仓库: Linux环境下JDK安装 二 .安装步骤 2.1 下载并解压 下载所需版本的Flume,这里我下载的是CDH版本的Flum ...
- 使用pymysql操作mysql数据库
PyMySQL的安装和连接 PyMySQL的安装 python3. -m pip install pymysql python连接数据库 import pymysql # 创建连接 conn = py ...
- c++ 子类,基类 中this指针 虚函数使用
笔记: 子类和基类 构造函数不显式时,的this指针相同..在QT中,如果父类基于QObject,那么构造子类时传入this指针,这样所有子类,父类,基类都是同一地址.delelater(),会del ...
- SqlHelper(基础)
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...
- hive 常用的 join 操作 实例
test_a 表 id value 1 java 2 python 3 c++ test_b 表 id value 1 java 2 go 3 php 4 c++ 1. join 计算的是笛卡尔积,不 ...
- java-NIO-概念
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty 一.概述 NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selec ...
- RT-Thread定时器以及结构体指针的一些思考
定时器分为软件定时器和硬件定时器.顾名思义,软件定时器就是有操作系统提供的软件定时器,硬件定时器就是用硬件芯片提供的定时器. 而在RT-Thread操作系统提供的定时器是软件定时器,但是为了便于管理, ...
- 客户端持久化数据库---indexedDB使用
_ 阅读目录 一:什么是indexedDB数据库? 二:IndexedDB数据库操作 2.1 打开或创建数据库 2.2 创建对象仓库(或叫创建表) 2.3 创建索引 2.4 新增数据 2.5 读取数据 ...