目 录
第 1 章 引言 5
1.1 研究背景和意义 5
1.2 视频去雾问题的描述 6
1.3 本文的工作 8
1.4 本章小结 8
第 2 章 综述 9
2.1 传统的视频去雾方法 9
2.2 基于拉普拉斯平滑的视频去雾方法 12
2.3 本章小结 13
第 3 章 视频去雾和立体重建方法 14
3.1 颜色一致性项的构建 14
3.1.1 评估深度图的颜色一致性 14
3.1.2 基于散射效应的颜色一致性项的计算 15
3.2 几何相关项的构建 17
3.3 平滑项的构建 18
3.3.1 朴素的平滑 18
3.3.2 基于传输的排序约束的平滑 19
3.4 拉普拉斯平滑项的构建 20
3.5 立体重建深度图的构建 22
3.5.1 能量方程的构建 22
3.5.2 能量方程的最优化 23
3.6 本章小结 24
第 4 章 实验和分析 25
4.1 实验结果展示 25
4.2 实验结果与问题分析 26
4.3 本章小结 27
第 5 章 总结与展望 28
5.1 研究成果总结 28
5.2 本章小结 29
参考文献 30
致 谢 32
2.2 基于拉普拉斯平滑的视频去雾方法
雾对立体重建算法提出了挑战,同时也带来了补偿优势。从计算的观点来看,众所周知,立体重建对远距离图无法很好地工作。进一步的深度平滑会导致表面细节损失,例如细长的结构和孔洞。雾信息包含的深度信息在性质上是不同的,因为较厚的雾与较大的距离相关联。
在本文中,联合研究立体视觉和去雾问题,实现了一种同时估计场景深度和对输入图像除雾的算法。在立体视觉融合技术中,分为局部的和全局的立体视觉技术。局部的立体视觉技术围绕个别的像素周围的灰度值或者边缘模式进行匹配,但是其忽略了可能连接邻近点的约束。而立体视觉的全局方法,是将立体视觉问题建模为一个基于近邻像素的序列或者平滑约束的能量函数,并对其进行最小化。本文在基于传统的雾模型和能量函数上,使用了包含更加复杂的颜色一致性项,拉普拉斯平滑项,基于传输的排序约束的平滑项的新能量函数。在本文公式中,立体匹配和雾信息的深度线索相互加强,基于在计算机视觉广泛使用的散射模型,使用这个新的能量函数,可以同时实现立体重建和去雾。
立体匹配有五个约束条件:极线约束,顺序性约束,连续性约束(也称作表面平滑约束),唯一性约束,相似性约束。提出的衡量函数在一定程度上衡量了立体匹配的连续性约束和相似性约束。该方法包括四个关键特征。首先,我们改进了立体重建中的颜色一致性项以结合散射效应。当从不同的角度评估两个像素的一致性时,我们明确地模拟了由于雾而造成的外观变化。其次,我们直接从场景深度计算每个像素处的雾的传输。本文转载自http://www.biyezuopin.vip/onews.asp?id=14615这确保了我们的立体效果和除雾效果相互一致。第三步,我们将有效的雾传输的先验结合到立体重建除雾公式中。具体而言,由于雾的传输可以直接从深度计算,所以我们在场景深度处加入了拉普拉斯平滑约束,这个约束有助于捕捉深度图中的细节。最后,我们还利用基于传输的排序深度信息中的可靠信息,采用了成对的场景深度排序约束。
共同优化新的能量函数中的分项有助于为立体深度恢复和除雾带来双赢,通过定义新的颜色一致性项和拉普拉斯项,有助于保存深度图中的细节,这也是由于它与光谱图像分割密切相关。

// CallMatlab.cpp : 定义应用程序的入口点。#include "stdafx.h"
#include "CallMatlab.h"
#include "demo.h"
#include "Defog.h"
#include <string>
#include <iostream>
#include <comdef.h>
#include <GdiPlus.h>
#include "ali_api.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
#include "CVOperation.h"
#include "ResizeOperation.h"
#include "HoughDetection.h"
//#include "CVOperation2.h"
//#include "CVOperation3.h"
#pragma comment(lib, "Gdiplus.lib")
#pragma comment(lib, "libeng.lib")
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "mclmcrrt.lib")
#pragma comment(lib, "mclmcr.lib")
#pragma comment(lib, "demo.lib")
#pragma comment(lib, "Defog.lib")
#define MAX_LOADSTRING 100
#define R 0
#define G 1
#define B 2
#define D 3
// 全局变量:
HINSTANCE hInst;                                // 当前实例
TCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名// 此代码模块中包含的函数的前向声明:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);int TempData[1000][1000][1000] = {0};
int APIENTRY _tWinMain(HINSTANCE hInstance,     //main functionHINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此放置代码。MSG msg;HACCEL hAccelTable;// 初始化全局字符串LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_CALLMATLAB, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CALLMATLAB));GdiplusStartupInput gdiplusstartupinput;  ULONG_PTR gdiplustoken;  GdiplusStartup(&gdiplustoken, &gdiplusstartupinput, NULL); //ReadPhoto(L"lena.jpg","color.txt");int Useless = TrackbarExample();Useless = UseExample();// 读入一张图片  //cv::Mat img = cv::imread("C:\\Users\\lwl\\Desktop\\lena.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_COLOR);cv::namedWindow("原图");cv::imshow("原图",img);cv::waitKey(6000);char szFilePath[100] = {"D:\\sysu_three\\毕业设计\\fstereo_release\\data\\bali\\fog_images\\"};DefogInitialize();for(int i = 81; i <= 300; i++){std::string StrFileName;char szTemp[10];_itoa_s(i, szTemp, 10);StrFileName = szTemp;if(i < 100)      //两位数{StrFileName = "00" + StrFileName;}else{StrFileName = "0" + StrFileName;}StrFileName += ".png";wchar_t szFileName[100] = {0};AnsiToUnicode(StrFileName.c_str(), szFileName, StrFileName.size());ReadPhoto(StrFileName.c_str(),StrFileName.size()); //ReadPhotoBitmap* bmpEveryFrame = new Bitmap(szFileName);int height = bmpEveryFrame->GetHeight();int width =  bmpEveryFrame->GetWidth();mxArray* MxStrFilePath = mxCreateString(szFilePath);mxArray* MxStrFileName = mxCreateString(StrFileName.c_str());mlfDefog(MxStrFilePath, MxStrFileName);mxDestroyArray(MxStrFileName);mxDestroyArray(MxStrFilePath);delete bmpEveryFrame;}DefogTerminate();while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}GdiplusShutdown(gdiplustoken); cv::destroyAllWindows();return (int) msg.wParam;
}//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
//  注释:
//
//    仅当希望
//    此代码与添加到 Windows 95 中的“RegisterClassEx”
//    函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
//    这样应用程序就可以获得关联的
//    “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style           = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra      = 0;wcex.cbWndExtra        = 0;wcex.hInstance     = hInstance;wcex.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CALLMATLAB));wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName  = MAKEINTRESOURCE(IDC_CALLMATLAB);wcex.lpszClassName   = szWindowClass;wcex.hIconSm       = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(&wcex);
}//
//   函数: InitInstance(HINSTANCE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{HWND hWnd;hInst = hInstance; // 将实例句柄存储在全局变量中hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;
}//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的: 处理主窗口的消息。
//
//  WM_COMMAND  - 处理应用程序菜单
//  WM_PAINT    - 绘制主窗口
//  WM_DESTROY  - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case WM_COMMAND:wmId    = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择:switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意绘图代码...EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;
}









基于拉普拉斯平滑项的视频图像去雾及重建的实现相关推荐

  1. Single Image Haze Removal Using Dark Channel Prior 基于暗原色先验的单一图像去雾方法【翻译】

    Single Image Haze Removal Using Dark Channel Prior Kaiming He, Jian Sun, Xiaoou Tang The Chinese Uni ...

  2. 一种基于暗通道先验算法的图像去雾技术研究

    目录 一.绪论 二.雾霭图像模型与暗通道先验 三.透射率估计 四.大气光值估计 五.实例分析 参考文献 一.绪论 图像去雾技术,是由何凯明.孙健等人在CVPR2009提出来的,并获得当年CVPR最佳论 ...

  3. 基于暗通道优先的单幅图像去雾算法(Matlab)

    基于暗通道优先的单幅图像去雾算法(Matlab) 每一幅图像的RGB三个颜色通道中,总有一个通道的灰度值很低,几乎趋向于0.基于这个几乎可以视作是定理的先验知识,作者提出暗通道先验的去雾算法. ​ 首 ...

  4. 基于暗原色先验的单幅图像去雾——算法复现

    基于暗原色先验的单幅图像去雾--算法复现 MOOC 数字图像处理的大作业学习 暗原色先验理论 暗原色先验是对无雾图像的统计规律,对无雾的图像的研究,发现在绝大多数户外无雾图像的任意局部小块中,总存在一 ...

  5. 基于暗通道先验的单幅图像去雾算法小结

    在开始之前,先看一组去雾的效果图. 1. 关于去雾的意义及算法 去雾在视频监控.航拍.遥感.自动/辅助驾驶等需要在室外复杂.恶劣天气下运行的视觉系统,都可能需要运用到这一技术. 目前去雾算法主要有两个 ...

  6. 【图像增强】基于matlab人工多重曝光融合AMEF图像去雾【含Matlab源码 1916期】

    ⛄一. 图像增强技术简介 1 图像增强 图像增强是对图像的某些特征,如边缘.轮廓.对比度等进行强调或锐化,以便于显示.观察或进一步分析与处理.通过对图像的特定加工,将被处理的图像转化为对具体应用来说视 ...

  7. 【图像增强】基于人工多重曝光融合AMEF实现图像去雾附matlab代码

    1 简介 Bad weather conditions can reduce visibility on images acquired outdoors, decreasing their visu ...

  8. 综述:视频和图像去雾算法以及相关的图像恢复和增强研究

    综述:视频和图像去雾算法以及相关的图像恢复和增强研究 翻译自IEEE的一篇文章<Review of Video and Image Defogging Algorithms and Relate ...

  9. 基于MATLAB改进暗通道先验的图像去雾算法

    基于MATLAB改进暗通道先验的图像去雾算法 摘要:暗通道先验去雾算法求得的的透射率比较精细,去雾效果优于大多数去雾算法.然而在暗通道求取过程中,最小值滤波的处理会使得暗色向外扩张,导致透射率扩张变大 ...

最新文章

  1. Android Build.VERSION.SDK_INT
  2. java正则表达式课程_通过此免费课程学习正则表达式
  3. Seamless cloning泊松克隆
  4. Windows 10 常用的快捷键及常用指令
  5. 每周总结(第十一周)
  6. 李洋疯狂C语言之将”you are come from shanghai ”倒置为”shanghai from come are you”,将句子中的单词位置倒置,而不改变单词内部结构
  7. C语言中auto,register,extern,static【转】
  8. qlineedit限制输入数字_Excel单元格限制录入,实用小技巧
  9. 诺基亚贝尔完成5G毫米波NR-DC和200MHz载波带宽测试
  10. 3516a 自带的ive 算子的运行情况分析
  11. 随想录(cpu缓存、cache同步和乱序执行)
  12. 11月13日上午ajax返回数据类型为JSON数据的处理
  13. python查找并修改文件中的内容_如何使用Python搜索和替换文件中的文本?
  14. VS2010: Microsoft.TeamFoundation.PowerTools.CheckinPolicies.ChangesetComments 未注冊
  15. mysql 5.7配置的一些记录
  16. 计算机设备如何巡检,计算机联锁设备巡检作业指导书.pdf
  17. Your brain expands and shrinks over time — these charts show how
  18. c++中rand(),srand()使用
  19. Java实现计数排序
  20. Win11如何自动清理垃圾?Win11自动删除文件设置方法

热门文章

  1. golang学习之go web 开发
  2. 随笔一计:微信h5支付商家存在未配置的参数xxx
  3. 技术文章里那么多的问号与叹号
  4. 今天找到一个电子书 百家讲坛——于丹《论语》心得
  5. 悲剧的JAVA环境变量
  6. 化学应用软件经典之经典--ChemOffice
  7. iphone 4s页面引用jssdk无效
  8. How to cross compile the PPP to arm-xscale
  9. linux 防arp 带宽,linux下防止arp攻击
  10. Android之Application详解