Coherent Line Drawing
Proc. NPAR 2007
https://github.com/uva-graphics/coherent_line_drawing
https://github.com/SSARCandy/Coherent-Line-Drawing
https://ssarcandy.tw/2017/06/26/Coherent-Line-Drawing/

所谓的 Line drawing 就是直线素描,在这里的意境就是:输入一幅图像,输出一副直线艺术风格画

本文主要是对 传统基于 difference-of-Gaussians (DoG) + binary thresholding 进行边缘检测的改进 。 传统的 difference-of-Gaussians (DoG) 使用的是 isotropic filter kernel,普通的高斯核是 各向同性的,也就是没有原来的算法在进行高斯卷积时没有考虑边缘的方向信息。 这里将边缘的梯度方向信息溶于到 difference-of-Gaussians (DoG) + binary thresholding 中。

The main idea behind our approach is to take into account the direction of the local image structure in DoG filtering, rather than looking in all directions.Especially, we apply DoG filter only in a direction perpendicular to that of the local `edge flow’, that is, the direction in which there is supposed to exist the biggest contrast. We then collect the evidence (filter response) along this flow to finally determine the edge strength

本文的主要思想就是在进行 DoG filtering 时,考虑图像局部结构的方向信息。我们只在边缘梯度方向的法线方向进行 DoG filter。 然后我们沿着边缘梯度方向综合考虑 DoG filter 的响应来最终决定其 edge strength

对于图像的梯度方向信息,我们使用 Edge Tangent Flow 来描述

这个 Edge Tangent Flow 必须满足几个条件:
1)可以描述中医边缘的流向
2)邻近的向量必须要平滑(避免邻近的向量方向差太多),除非是角落
3)重要的边缘必须要维持它原本的方向


Generate initial ETF Edge Tangent Flow的 初始化
这里使用 Sobel operator 来获取初始的 gradient map,然后归一化,接着对向量旋转90度 taking perpendicular vectors (in the counter-clockwise sense)


Refining ETF 使用 ETF construction filter 进行迭代平滑, ETF construction filter 定义如下:


ws(x,y):是一个圆形boxfilterfunction,落在外面的向量权重为零w_{s} (x,y):是一个圆形\ box \ filter \ function,落在外面的向量权重为零ws​(x,y):是一个圆形 box filter function,落在外面的向量权重为零
wm(x,y):为magnitudeweightfunction,用为确保重要的边缘方向会被保留w_{m} (x,y): 为\ magnitude\ weight\ function,用为确保重要的边缘方向会被保留wm​(x,y):为 magnitude weight function,用为确保重要的边缘方向会被保留
wd(x,y):为directionweightfunction,用于使得相邻的向量方向不会差距过大w_{d} (x,y) :为\ direction\ weight\ function,用于使得相邻的向量方向不会差距过大wd​(x,y):为 direction weight function,用于使得相邻的向量方向不会差距过大
ϕ(x,y):则是当两向量夹角过大时会反转方向以确保夹角不大于90度\phi(x,y):则是当两向量夹角过大时会反转方向以确保夹角不大于 90 度ϕ(x,y):则是当两向量夹角过大时会反转方向以确保夹角不大于90度
通过以上方法,只需要输入kernal size 即可反复平滑边缘向量流场,直至够平滑为止


Flow-based Difference-of-Gaussians
根据 flow-based kernel 来进行 Difference-of-Gaussians(DoG) ,对每個像素沿着 ETF 垂直方向做一维的 DoG,亦即对上图中 -T~T 做 DoG

再沿着 -S~S 做一维的高斯加权:

最后进行二值化

Iterative FDoG filtering
有时候做一次 FDoG 效果并不够好,所以可以藉由反覆做 FDoG 来达到更良好的效果。
要反覆套用 FDoG 也很容易,只要将原图与 FDoG 的输出叠加,然后以这个新的图片当作原图再次套用一次 FDoG 即可。

一致性直线提取--Coherent Line Drawing相关推荐

  1. LSD(Line Segment Detector)直线提取算法

    LSD是2010年发表在ipol上的一篇论文提出的直线提取算法,在较短的时间内可以提取一张灰度图上所有的线段特征. (文中提到了a contrario model 和 Helmoholtz princ ...

  2. OpenCVSharp入门教程 特征提取③——HoughLinesP直线寻找,直线提取

    文章目录 一.前文 二.算法流程 三.界面布局 四.功能实现 4.1 打开图片 4.2 HoughLinesP直线提取-源码 4.3 HoughLinesP直线提取-参数讲解 五.运行效果图 六.参考 ...

  3. 【openMV】霍夫变换---直线提取

    原理部分: 原理部分参考:https://blog.csdn.net/yuyuntan/article/details/80141392 霍夫变换公式:r=xcosθ+ysinθ(x,y代表目标点) ...

  4. Python+OpenCV:Hough直线检测(Hough Line Transform)

    Python+OpenCV:Hough直线检测(Hough Line Transform) 理论 A line can be represented as  or in a parametric fo ...

  5. 全空间视频融合---学习之路(一)--直线提取检测--投影纹理--相机姿态标定

    在增强现实的实际应用环境中,人们会为全空间大规模场景构造三维模型.为了增强虚拟环境的逼真性和动态性,可以向环境中融合真实世界的视频.透过视频可以获知模型该区域发生的事件.这就有了 摄像机的视频信息和三 ...

  6. 通过霍夫直线检测方式获取直线,自定义提取直线(提取出两条接近平行的直线),将直线进行拟合

    由于项目的需要,需要使用霍夫直线检测进行处理图像.这里进行笔记记录,话不多说,先上代码: #include <opencv2/opencv.hpp> #include <opencv ...

  7. opencv 霍夫曼变换 直线提取

    import cv2 import numpy as np img = cv2.imread("hd.jpeg", 0)img = cv2.GaussianBlur(img,(3, ...

  8. 边缘检测之从Sobel、Canny、DoG到XDoG

    笔者按:2012年发表的XDoG这篇文章在图像处理领域个人认为是一片非常经典的文章.本文里面不仅提出了XDoG,还对传统的图像边缘检测理论.DoG理论做出了详细的阐释,并给出了XDoG的多个应用.本文 ...

  9. 初识霍夫变换——霍夫变换直线检测原理(Line Detection)

    参考博客: 1.Opencv学习笔记-----霍夫变换直线检测及原理理解 2.霍夫变换检测直线原理及实例 3.霍夫变换直线检测(Line Detection)原理及示例 霍夫变换(Hough Tran ...

最新文章

  1. centos设置固定IP方法
  2. POJ2528 计算可见线段(线段树)
  3. swapCursor vs changeCursor, what’s the difference?
  4. 提高DB2数据库Web程序性能的两条规则
  5. centos7开放端口
  6. centos7重新加载服务的命令_Centos7 常用防火墙操作命令
  7. java jee curd_Java / JEE中的有效日志记录–映射的诊断上下文
  8. 文件上传~Uploadify上传控件~续(多文件上传)
  9. 机器学习中常用的优化方法
  10. Oracle 数据库基本知识概念
  11. 动态规划——状态转移方程
  12. 不是一个PDF文件或该文件已损坏
  13. 如何快速构建千人规模的数字化研发管理系统
  14. 新能源汽车OTA升级中的UDS通信分析
  15. 卷积神经网络超详细介绍
  16. android 仿qq 通讯录,Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展[图文+源码]...
  17. Mac 不显示未知来源选项的解决办法
  18. 2021-2027全球与中国含氮饮料市场现状及未来发展趋势
  19. CryENGINE 3: reaching the speed of light
  20. 谷粒商城六商品服务三级分类

热门文章

  1. KinectFusion简介
  2. Ubuntu14.04安装NVIDIA驱动后之后无法进入图形界面
  3. Shiny平台构建与R包开发(四)——按钮与响应事件
  4. ggplot2 图形排版:patchwork 包复杂排版
  5. 土壤生物多样性与生物化学过程研讨会(6.20-23合肥)
  6. QIIME 2用户文档. 18序列双端合并read-joining(2019.7)
  7. R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等
  8. pandas使用sum函数计算dataframe单数据列的加和或者对所有的数据列进行求和(sum column or all columns of dataframe)
  9. matplotlib可视化基本散点图、在图像多个指定区域绘制方框、进行自定义色彩填充(Draw Multiple Rectangles)
  10. R语言ggplot2可视化:ggplot2可视化分组散点图并使用geom_smooth函数在散点图图中为不同的散点簇添加对应的回归曲线