用OpenCVSharp 4.5 跑一遍 OpenCV 官方教程

原官方教程链接:OpenCV: Out-of-focus Deblur Filter

using System;
using OpenCvSharp;namespace ConsoleApp1
{class tutorial30 : ITutorial{public void Run(){int R = 6   ; //计算PSF参数:R(半径)double snr = 500; //维纳滤波器参数Mat imgIn = Cv2.ImRead("I:\\csharp\\images\\original.jpg", ImreadModes.Grayscale);if (imgIn.Empty()) //check whether the image is loaded or not{Console.WriteLine("ERROR : Image cannot be loaded..!!");return;}Mat imgOut = new Mat();// it needs to process even image onlyRect roi = new Rect(0, 0, imgIn.Cols & -2, imgIn.Rows & -2);//Hw calculation (start)Mat Hw = new Mat();Mat h = new Mat();calcPSF(out h, roi.Size, R);calcWnrFilter(h, out Hw, 1.0 / snr);//Hw calculation (stop)// filtering (start)filter2DFreq( imgIn[roi], out imgOut, Hw);// filtering (stop)imgOut.ConvertTo(imgOut, MatType.CV_8U);Cv2.Normalize(imgOut, imgOut, 0, 255, NormTypes.MinMax);Cv2.ImShow("result.jpg", imgOut);Cv2.WaitKey();}private void calcPSF(out Mat outputImg, Size filterSize, int R){Mat h = Mat.Zeros(filterSize, MatType.CV_32F);Point point = new Point(filterSize.Width / 2, filterSize.Height / 2);Cv2.Circle(h, point.X, point.Y, R, 255, -1, LineTypes.Link8);Scalar summa = Cv2.Sum(h);outputImg = h / summa[0];}private void filter2DFreq(Mat inputImg, out Mat outputImg, Mat H){inputImg.Clone().ConvertTo(inputImg,MatType.CV_32F);Mat[] planes = { inputImg, Mat.Zeros(inputImg.Size(), MatType.CV_32F) };Mat complexI = new Mat();Cv2.Merge(planes, complexI);Cv2.Dft(complexI, complexI, DftFlags.Scale);H.Clone().ConvertTo(H, MatType.CV_32F);Mat[] planesH = { H, Mat.Zeros(H.Size(), MatType.CV_32F) };Mat complexH = new Mat();Cv2.Merge(planesH, complexH);Mat complexIH = new Mat();Cv2.MulSpectrums(complexI, complexH, complexIH, 0);Cv2.Idft(complexIH, complexIH);Cv2.Split(complexIH, out planes);outputImg = planes[0];}private void fftshift(Mat inputImg, out Mat outputImg){outputImg = inputImg.Clone();int cx = outputImg.Cols / 2;int cy = outputImg.Rows / 2;Mat q0 = new Mat(outputImg, new Rect(0, 0, cx, cy));Mat q1 = new Mat(outputImg, new Rect(cx, 0, cx, cy));Mat q2 = new Mat(outputImg, new Rect(0, cy, cx, cy));Mat q3 = new Mat(outputImg, new Rect(cx, cy, cx, cy));Mat tmp = new Mat();q0.CopyTo(tmp);q3.CopyTo(q0);tmp.CopyTo(q3);q1.CopyTo(tmp);q2.CopyTo(q1);tmp.CopyTo(q2);}private void calcWnrFilter(Mat input_h_PSF, out Mat output_G, double nsr){Mat h_PSF_shifted = new Mat();fftshift(input_h_PSF, out h_PSF_shifted);Mat[] planes = { h_PSF_shifted.Clone(), Mat.Zeros(h_PSF_shifted.Size(), MatType.CV_32F) };Mat complexI = new Mat();Cv2.Merge(planes, complexI);Cv2.Dft(complexI, complexI);Cv2.Split(complexI, out planes);Mat denom = new Mat();Cv2.Pow(Cv2.Abs(planes[0]), 2, denom);denom += nsr;Mat output = new Mat();Cv2.Divide(planes[0], denom, output);output_G = output;}}
}

最后效果与参数设置关系很大!多试验

OpenCVSharp 4.5 去离焦模糊相关推荐

  1. 基于MATLAB的离焦模糊图像复原

    基于MATLAB的离焦模糊图像复原 摘 要 图像在获取.传输和存储过程中会受到如模糊.失真.噪声等原因的影响,这些原因会使图像的质量下降.因此,我们需要采取一定的方法尽可能地减少或消除图像质量的下降, ...

  2. 《一周学完光线追踪》学习 十一点五 离焦模糊代码原理分析

    蒙特卡洛光线追踪技术系列 见 蒙特卡洛光线追踪技术 首先分析一下生成随机Ray的程序: vec3 random_in_unit_disk() {vec3 p;do {p = 2.0*vec3(rand ...

  3. TOF双频去距离模糊原理

    1. TOF距离模糊现象及原因 Continuous-Wave TOF (CW-TOF)法通过测量发射波与接收波的相位差来计算距离.假设相位差为phi, 调制频率为fm, 则距离值计算为: d = c ...

  4. 图像处理之仿真运动模糊复原【使用逆滤波、维纳滤波】

    目录 一.基础知识 二.问题分析 三.效果图 四.代码 一.基础知识 图像去模糊是一个经典的图像复原任务.造成图像模糊的原因有很多,可以主要分为三大类 离焦模糊:场景中的物体处于成像景深范围之外而变得 ...

  5. android 滑动模糊渐变,Android UI效果实现 滑动模糊渐变效果实现

    大家应该都看到过iOS7解锁屏幕的滑动模糊渐变效果,好了,现在可以把手纸收起来了,今天黄老师就给大家讲一下如何在Android平台上 实现类似的滑动模糊渐变效果,其实方式远比你想像的简单. 目标效果展 ...

  6. cad模糊查询符号_万能模糊查询SQL

    ****************************************************************** * 功能:万能模糊查询SQL * 时间:2015/1/30 16: ...

  7. [转载]模糊系统:挑战与机遇并存——十年研究之感悟 王立新

    [转载]模糊系统:挑战与机遇并存--十年研究之感悟 王立新 http://www.ee.ust.hk/ece.php http://www.ee.ust.hk/~eewang/ 模糊系统:挑战与机遇并 ...

  8. 图像运动模糊及其去除

    Introduction 图像去模糊是一个经典的图像复原任务.造成图像模糊的原因有很多,可以主要分为三大类 离焦模糊:场景中的物体处于成像景深范围之外而变得模糊.离焦模糊的去除一般对应着景深的扩展技术 ...

  9. 模糊图像的倒谱matlab,基于倒谱分析方法的离焦模糊图像特征鉴别

    基于倒谱分析方法的离焦模糊图像特征鉴别 [摘要]在图像拍摄记录的过程中,图像捕获系统因各种原因常常不能精确成像,故而极易产生模糊图像,离焦模糊是常见的模糊图像之一.本文重点介绍了一种倒谱分析方法,在倒 ...

最新文章

  1. 【Luogu P2764】最小路径覆盖问题
  2. laravel中单独获取一个错误信息的方法
  3. tornado函数和类的导入和ui_modules  , ui_methods
  4. Web开发的那点事--业务层常用功能
  5. linux nacos启动_Nacos集群安装配置
  6. 可视化工具Navicat for MySQL-操作三
  7. dabs是什么意思_cpdd是什么意思(网络语cpdd是什么梗啥意思)
  8. Dom4j工具--XML的DOM解析(下)--写操作
  9. Atom飞行手册翻译: 3.6 图标
  10. linux php 中文乱码解决,Linux中文乱码如何解决
  11. 在Anylogic建立自己的智能体
  12. 做个简单的Java学生考勤系统04--签到功能的开发
  13. 识别“百度权重”作弊的方法
  14. 怎样用计算机筛选,教您Excel中筛选功能怎么用
  15. java对七牛云文件的增删改查语句_七牛云导播
  16. 从零开始学习Java设计模式 | 软件设计原则篇:依赖倒转原则
  17. JQuery中$(document)和$(window)是什么意思,有什么作用
  18. 远程计算机云电脑,教你一招 手机免费变云电脑可以玩PC云游戏
  19. NOIp2016 题解
  20. RISC领域ARM不是唯一

热门文章

  1. IDEA 解决插件页面转圈问题
  2. 【视野】解密腾讯完整前端技术体系
  3. 制作的excel表格如何放到微信公众平台文章中?
  4. Android 说说Bitmap那些事
  5. 不能忘记陪我们长大的100部电影
  6. 在 Windows10 系统下重新安装 Ubuntu22.04 系统
  7. 郭盛华:警惕黑客通过共享充电宝入侵手机
  8. Unity编辑器扩展——在Editor下动态添加监听事件
  9. Wireshark对pop3抓包分析
  10. 物联网推进水产养殖业标准化规模化进程