当前位置: 首页 > news >正文

服务器打不开网站/营销策划经典案例

服务器打不开网站,营销策划经典案例,卫生部对3甲医院网站建设要求,微信小程序免费模板平台代码开源在 https://github.com/BBuf/Image-processing-algorithm,感兴趣给我来个星星呗。1. 前言这是OpenCV图像处理算法朴素实现专栏的第17篇文章。今天为大家带来一篇之前看到的用于单幅图像去雾的算法,作者来自清华大学,论文原文见附录。…

92450fe2384ccc83ed1653bd4e70be58.png
代码开源在 https://github.com/BBuf/Image-processing-algorithm,感兴趣给我来个星星呗。

1. 前言

这是OpenCV图像处理算法朴素实现专栏的第17篇文章。今天为大家带来一篇之前看到的用于单幅图像去雾的算法,作者来自清华大学,论文原文见附录。

2. 雾天退化模型

之前在介绍何凯明博士的暗通道去雾论文OpenCV图像处理专栏六 | 来自何凯明博士的暗通道去雾算法(CVPR 2009最佳论文)的时候已经讲到了这个雾天退化模型,我们这里再来回顾一下。在计算机视觉领域,通常使用雾天图像退化模型来描述雾霾等恶劣天气条件对图像造成的影响,该模型是McCartney首先提出。该模型包括衰减模型和环境光模型两部分。模型表达式为:

其中,

是图像像素的空间坐标,
是观察到的有雾图像,
是待恢复的无雾图像,
表示大气散射系数,
代表景物深度,
是全局大气光,通常情况下假设为全局常量,与空间坐标
无关。

公式(1)中的

表示坐标空间
处的透射率,我们使用
来表示透射率,于是得到公式(2):

由此可见,图像去雾过程就是根据

求解
的过程。要求解出
,还需要根据
求解出透射率
和全局大气光
实际上,所有基于雾天退化模型的去雾算法就是是根据已知的有雾图像
求解出透射率
和全局大气光

对于暗通道去雾算法来说,先从暗原色通道中选取最亮的0.1%比例的像素点,然后选取原输入图像中这些像素具有的最大灰度值作为全局大气光值

。RGB三通道中每一个通道都有一个大气光值。

然后根据公式(2)可以得出:

首先可以确定的是

的范围是
的范围是
的范围是
是已知的,可以根据
的范围从而确定
的范围。已知的条件有:

根据(4)和(5)推出:

因此初略估计透射率的计算公式:

最后为了保证图片的自然性,增加一个参数

来调整透射率 :

好了,上面复习完了何凯明博士的暗通道去雾,我们一起来看看清华大学这篇论文。

3. 算法流程

181b27f783362f430d6f63105c846c8a.png

实际上有了这个算法流程就可以写出代码了,不过为了加深理解可以看下面的一些推导。

4. 一些推导

我们知道去雾的步骤主要就是估计全局大气光值

和透射率
,因此,本文就是根据输入图像估计
(这篇论文使用了
来代替
),然后根据雾天退化模型求取去雾后的图像。

4.1 估计透射率t(x)

从第二节的介绍我们知道

然后这篇论文使用了

来代替
,即:

我们取

三个通道的最小值并记为:

所以公式2变换为

对公式(4)右边进行均值滤波:

其中

代表均值滤波的窗口大小,
表示像素
的邻域。

均值滤波后的结果可以反映

的大致趋势,但与真实的
还差一定的绝对值,因此,我们先得出透射率的粗略估计值:

其中

,因此

为了防止去雾后图像出现整体画面偏暗,这里根据图像的均值来调整

,即:

其中

中所有元素的均值,
是调节因子。

因此可以得到透射率的计算公式:

结合公式(1)推出:

4.2 估计全球大气光值

公式(5)中第一个等式左侧的表达式取值范围为

,由此得出

一般情况下又存在

(KaiMing He的暗通道先验理论)。这样就初步确定了全局大气光的范围,为了能快速获取全局大气光,文章直接取两者的平均值作为全局大气光值,即:

...(9)。

然后大气光值

都搞定了,那么带入算法流程中的最后一个公式就可以获取最后的图像了。

5. 代码实现

下面是代码实现。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace cv;
using namespace std;int getMax(Mat src) {int row = src.rows;int col = src.cols;int temp = 0;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {temp = max((int)src.at<uchar>(i, j), temp);}if (temp == 255) return temp;}return temp;
}Mat dehaze(Mat src) {double eps;int row = src.rows;int col = src.cols;Mat M = Mat::zeros(row, col, CV_8UC1);Mat M_max = Mat::zeros(row, col, CV_8UC1);Mat M_ave = Mat::zeros(row, col, CV_8UC1);Mat L = Mat::zeros(row, col, CV_8UC1);Mat dst = Mat::zeros(row, col, CV_8UC3);double m_av, A;//get Mdouble sum = 0;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {uchar r, g, b, temp1, temp2;b = src.at<Vec3b>(i, j)[0];g = src.at<Vec3b>(i, j)[1];r = src.at<Vec3b>(i, j)[2];temp1 = min(min(r, g), b);temp2 = max(max(r, g), b);M.at<uchar>(i, j) = temp1;M_max.at<uchar>(i, j) = temp2;sum += temp1;}}m_av = sum / (row * col * 255);eps = 0.85 / m_av;boxFilter(M, M_ave, CV_8UC1, Size(51, 51));double delta = min(0.9, eps*m_av);for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {L.at<uchar>(i, j) = min((int)(delta * M_ave.at<uchar>(i, j)), (int)M.at<uchar>(i, j));}}A = (getMax(M_max) + getMax(M_ave)) * 0.5;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {int temp = L.at<uchar>(i, j);for (int k = 0; k < 3; k++) {int val = A * (src.at<Vec3b>(i, j)[k] - temp) / (A - temp);if (val > 255) val = 255;if (val < 0) val = 0;dst.at<Vec3b>(i, j)[k] = val;}}}return dst;
}int main() {Mat src = imread("F:fog1.jpg");Mat dst = dehaze(src);cv::imshow("origin", src);cv::imshow("result", dst);cv::imwrite("F:fogres.jpg", dst);waitKey(0);return 0;
}

6. 结果

33d17059f1c3c14d314d062b96687b01.png

61c776238640ff2bb53b43da39642100.png

af023a62dfe638f8a1986cb4f461d3be.png

8e0b52e3f115f0450c88af8cb0e09faf.png

225272fecfbd6819ebe77a20fea9dad1.png

2423d5414f78eae2cd346775b5b6065c.png

0a0b2eb52e6bcc54db7e7c1bf71bdc84.png

ba6a13ab0c90c65c9e141b794d07a706.png

41f8e6f2fc3a7ca8fa7a7a0e266914a5.png

0fa4ac0e78fb6b3fd4a418bf95f1234d.png

7. 结论

算法里面有2个参数可以自己调节,滤波的半径和

。具体如何调节?我就不放在这里说了,这个算法后面会在我的新专题里面进行一遍优化,到时候再来回答这个问题。如果你迫切需要这个算法的实现或者对它感兴趣,可以自己尝试调整这两个参数获得想要的效果。这里的均值滤波也可以换成我们之前讲的Side Window Filter说不定可以获得更好的效果。

8. 参考

  • https://blog.csdn.net/u013684730/article/details/76640321
  • https://www.cnblogs.com/Imageshop/p/3410279.html

欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

https://u.wechat.com/MPWFDnmCPu6zgf5YUtdpT_U (二维码自动识别)

http://www.lbrq.cn/news/1344079.html

相关文章:

  • 深圳专业网站制作费用/义乌最好的电商培训学校
  • dedecms 做影网站/网站收录情况
  • c asp.net 发布网站/app广告联盟平台
  • 商贸有限公司企业简介/安卓优化大师老版本
  • 网站建设app开发合同/外贸接单平台网站
  • 部门网站建设管理典型经验材料/杭州网站推广与优化
  • 昆山广告设计制作公司/河北百度seo
  • 珠海在线网站制作公司/品牌策划是做什么的
  • 天津和平做网站贵吗/海外营销方案
  • 做女装网站应怎么定位/网页制作流程
  • 图片展示网站/如何做企业网页
  • 南宁手机网站建设/制作app平台需要多少钱
  • 怎么做网站添加二维码/建立一个网站需要多少钱?
  • 网站专业代做哪家好/seo sem优化
  • 另类投资公司网站建设规定/营销推广方案
  • 跨平台app开发工具/广州seo教程
  • 如何做网站的订阅/网络营销有哪些就业岗位
  • 用discuz怎样做网站/seo行业岗位有哪些
  • 第一接单网平台/搜索关键词优化排名
  • 网站建设公司兴田德润实惠/西安百度seo代理
  • 移动网站趋势/html做一个简单的网页
  • 大连疫情最新情况今日新增轨迹/东莞市网络seo推广服务机构
  • 一蓝网站建设/平原县网站seo优化排名
  • 机关网站建设方案/员工培训
  • php动态网站开发案例教程实训答案/深圳推广公司有哪些
  • 地产网站开发/网络赚钱推广
  • 网站如何做进一步优化/自助建站系统模板
  • 网站先做前台还是后台/万网官网登录
  • 制作网站品牌公司哪家好/中国十大搜索引擎网站
  • 池州网站建设电话/深圳网络推广最新招聘
  • Baumer高防护相机如何通过YoloV8深度学习模型实现道路坑洼的检测识别(C#代码UI界面版)
  • wordpress文章摘要调用的3种方法
  • 政府数字化大屏系统 - Flask实现方案
  • WinForm 对话框的 Show 与 ShowDialog:阻塞与非阻塞的抉择
  • LabVIEW多循环架构
  • 8.3.1 注册服务中心Etcd