本文代码参考自博客

原作者论文下载地址

// CoherenceFilter.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <opencv2/opencv.hpp>using namespace cv;/* ==============================================
*   Coherence-Enhancing Shock Filters
*  Author:WinCoder@qq.com
*  inspired by
*  Joachim Weickert "Coherence-Enhancing Shock Filters"
*  http://www.mia.uni-saarland.de/Publications/weickert-dagm03.pdf
*
*   Paras:
*   @img        : input image ranging value from 0 to 255.
*   @sigma      : sobel kernel size.
*   @str_sigma  : neighborhood size,see detail in reference[2]
*   @belnd      : blending coefficient.default value 0.5.
*   @iter       : number of iteration.
*
*   Example:
*   Mat dst = CoherenceFilter(I,11,11,0.5,4);
*   imshow("shock filter",dst);
*/Mat CoherenceFilter(Mat img, int sigma, int str_sigma, float blend, int iter)
{Mat I = img.clone();int height = I.rows;int width = I.cols;for (int i = 0; i <iter; i++){Mat gray;cvtColor(I, gray, COLOR_BGR2GRAY);// 计算特征值和特征向量Mat eigen;cornerEigenValsAndVecs(gray, eigen, str_sigma, 3);vector<Mat> vec;split(eigen, vec);// vec[0]: λ1, vec[1]: λ2, vec[2]: x1, vec[3]: y1, vec[4]: x2,  vec[5]: y2// 主特征向量 wMat x, y;x = vec[2];    // cy = vec[3];    // s// Sobel近似求解二阶导数Mat gxx, gxy, gyy;Sobel(gray, gxx, CV_32F, 2, 0, sigma);Sobel(gray, gxy, CV_32F, 1, 1, sigma);Sobel(gray, gyy, CV_32F, 0, 2, sigma);Mat ero;Mat dil;erode(I, ero, Mat());   // 最小值附近进行腐蚀dilate(I, dil, Mat());  // 最大值附近进行膨胀Mat img1 = ero;for (int nY = 0; nY<height; nY++){for (int nX = 0; nX<width; nX++){// 边界检测子v(ww)if (x.at<float>(nY, nX)* x.at<float>(nY, nX)* gxx.at<float>(nY, nX)+ 2 * x.at<float>(nY, nX)* y.at<float>(nY, nX)* gxy.at<float>(nY, nX)+ y.at<float>(nY, nX)* y.at<float>(nY, nX)* gyy.at<float>(nY, nX)<0){img1.at<Vec3b>(nY, nX) = dil.at<Vec3b>(nY, nX);    // 最大值的影响区域 dil}// 否则是最小值的影响区域 ero}}// 和原图按比例混合I = I*(1.0 - blend) + img1*blend;}return I;
}int main()
{Mat img = imread("D:/Pictures/beard.jpg", 1);Mat result = CoherenceFilter(img, 11, 11, 0.5, 2);imshow("Result", result);waitKey(0);return 0;
}

Coherence-Enhancing Shock Filters 代码及详细注释【OpenCV】相关推荐

  1. [嵌入式er笔记]大端小端详解(含代码及详细注释)

    link 之前文章< 浅谈ARM ABI,Android ABI >中有提到计划专门一篇文章讲下大小端,今天兑现一下. 1>"大端" "小端" ...

  2. 手撕yolo3系列——详解yolo3整体网络代码(详细注释)

    完整代码百度云直达链接(包含预训练权重)(小白注释) https://pan.baidu.com/s/1US6e93OaCYOghmF21v0UIA 提取码:z8at 参考链接 [注]代码是大神的代码 ...

  3. malloc 源码_【C++学习笔记(九)】之 new运算符的使用/ new 与 malloc的异同(附代码,详细注释)...

    new 运算符的使用 一. new的简单介绍: new运算符用于在堆区开辟空间,所有new出来的对象,对返回该类对象的指针. 二. new 与 malloc 的异同点: 1.malloc作用相同, m ...

  4. 慕课Python机器学习应用-代码实现(详细注释+数据集)

    课程链接:Python机器学习应用_北京理工大学_中国大学MOOC(慕课) 学习和实现的算法有Kmeans和DBSCAN,数据集是自己在网上搜集的,在我的资源区提供免费下载. Kmeans算法: 1. ...

  5. 基于OpenCV实现的图像油画效果代码(高效率、低耗时的C++代码-带详细注释)

    油画的特点是其颜色值很有限,并且笔比较粗,所以我们要实现油画效果关键就是利用运算实现这两点. 本文实现的图像油画效果代码原理如下: 一.将原图进行灰度化处理后将灰度值线性压缩到0~level,得到图像 ...

  6. uniapp - 超详细 H5 网站接入国家 “天地图“ 完整流程,提供显示地图、IP 属地定位 / 用户定位的城市名称、用户定位的经纬度等超多功能(可复制运行示例代码,详细注释及常见问题)

    前言 如果您需要 vue / nuxt 版本,请访问 这篇文章. 关于天地图的配置及使用教程的文章几乎没有,本文站在小白的角度从 0-1 进行配置和使用. 本文实现了 uniapp H5 网页项目,详 ...

  7. VQ矢量量化 LBG算法 c++代码实现 详细注释

    参考: 1.语音信号处理之(三)矢量量化(Vector Quantization) 这篇真的是非常厉害,在CSDN很多矢量量化的文章都是参考了这篇文章 2.矢量量化 百度文库的PPT,详细的描述了矢量 ...

  8. 手写Java线程池_超详细解说_绝对能运行_代码超详细注释

    线程池 问题背景 只是单纯使用 new Thread(runnable).start(); 的方式创建线程, 将会导致严重的程序性能问题: 1.线程创建, 销毁需要消耗很大的系统资源; 2.虚拟机创建 ...

  9. 【python】使用pushplus实现警报微信提醒,提供代码和详细注释

    目录 运行效果 如何获取token授权码 运行代码 官方API文档 总结 欢迎关注 『发现你走远了』 博客,持续更新中 欢迎关注 『发现你走远了』 博客,持续更新中 运行效果 如何获取token授权码 ...

最新文章

  1. noip复赛普及组2020_我校学子在2020年“外研社·国才杯”全国英语写作大赛(高职组)复赛中斩获佳绩...
  2. 专家:端午将至湖北地区挂马网站激增 用户需警惕
  3. key位置 win10生成的ssh_华为路由器配置SSH远程登录,就这么简单
  4. 通俗易懂,快速幂基本思想
  5. aspose 生成word 简单的文档操作
  6. Centos7更新 SQLite3至版本3.29.0
  7. Java StreamTokenizer quoteChar()方法与示例
  8. vue动态生成下拉框_解决vue动态下拉菜单 有数据未反应的问题
  9. 【翻译】在ruby中实现attributes的lazily initialization(惰性初始化)
  10. 多个限制条件数学建模matlab,急急。请教一个限制条件复杂的优化问题
  11. vuejs之Vue Devtools
  12. 进程和线程的基本概念与区别
  13. win7桌面背景_win7桌面背景怎么改?
  14. 思科CCNP在OSPF中设置LSA的简单命令汇总
  15. 静态路由使用下一跳和出接口的区别,我猜你不知道这一点!
  16. win10家庭版调出组策略_正版Win10免费送!支持无限次数重装
  17. 开关面板如何自己印字_墙壁开关上的商标是怎么印上去的
  18. 全志T7 Display驱动分析
  19. 谁还需要监控探头?eeGeo让老板知道你这一整天去了哪
  20. java能盗号吗_CVE-2017-8759漏洞新利用:Java Keylogger盗号木马分析

热门文章

  1. 谈谈对this对象的理解?
  2. WINDOWS BAT 批处理入门
  3. 一篇文章读懂JSON
  4. Flutter Text 行高相关
  5. Shell 脚本中 set -ex 命令的作用
  6. 操作体验极度舒适的多功能软件卸载工具 - iObit Uninstaller PRO
  7. 你会找什么样的男朋友!
  8. 【OpenCV入门学习--python】Anisotropic image segmentation by a gradient structure tensor
  9. latex 调整表格的行高_latex表格大小调整
  10. 体感游戏波斯王子:重生.