资源简介
三维块匹配(BM3D)算法:
它首先把图像分成一定大小的块,根据图像块之间的相似性,把具有相似结构的二维图像块组合在一起形成三维数组,然后用联合滤波的方法对这些三维数组进行处理,最后,通过逆变换,把处理后的结果返回到原图像中,从而得到去噪后的图像。该方法确实有效,它不仅有一个较高的信噪比,而且视觉效果也很好,是最经典的算法之一。此为BM3D算法的C++完整代码
代码片段和文件信息
/*
* Copyright (c) 2011 Marc Lebrun
* All rights reserved.
*
* This program is free software: you can use modify and/or
* redistribute it under the terms of the GNU General Public
* License as published by the Free Software Foundation either
* version 3 of the License or (at your option) any later
* version. You should have received a copy of this license along
* this program. If not see .
*/
/**
* @file bm3d.cpp
* @brief BM3D denoising functions
*
* @author Marc Lebrun
**/
#include
#include
#include
#include “bm3d.h“
#include “utilities.h“
#include “lib_transforms.h“
#define SQRT2 1.414213562373095
#define SQRT2_INV 0.7071067811865475
#define YUV 0
#define YCBCR 1
#define OPP 2
#define RGB 3
#define DCT 4
#define BIOR 5
#define HADAMARD 6
#ifdef _OPENMP
#include
#endif
using namespace std;
bool ComparaisonFirst(pair pair1 pair pair2)
{
return pair1.first < pair2.first;
}
/** ----------------- **/
/** - Main function - **/
/** ----------------- **/
/**
* @brief run BM3D process. Depending on if OpenMP is used or not
* and on the number of available threads it divides the noisy
* image in sub_images to process them in parallel.
*
* @param sigma: value of assumed noise of the noisy image;
* @param img_noisy: noisy image;
* @param img_basic: will be the basic estimation after the 1st step
* @param img_denoised: will be the denoised final image;
* @param width height chnls: size of the image;
* @param useSD_h (resp. useSD_w): if true use weight based
* on the standard variation of the 3D group for the
* first (resp. second) step otherwise use the number
* of non-zero coefficients after Hard Thresholding
* (resp. the norm of Wiener coefficients);
* @param tau_2D_hard (resp. tau_2D_wien): 2D transform to apply
* on every 3D group for the first (resp. second) part.
* Allowed values are DCT and BIOR;
* @param color_space: Transformation from RGB to YUV. Allowed
* values are RGB (do nothing) YUV YCBCR and OPP.
*
* @return EXIT_FAILURE if color_space has not expected
* type otherwise return EXIT_SUCCESS.
**/
int run_bm3d(
const float sigma
vector &img_noisy
vector &img_basic
vector &img_denoised
const unsigned width
const unsigned height
const unsigned chnls
const bool useSD_h
const bool useSD_w
const unsigned tau_2D_hard
const unsigned tau_2D_wien
const unsigned color_space
){
//! Parameters
const unsigned nHard = 16; //! Half size of the search window
const unsigned nWien = 16; //! Half size of the search window
const unsigned kHard = (tau_2D_hard == BIOR || sigma < 40.f ? 8 : 12); //! Must be a power of 2 if tau_2D_hard == BIOR
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-17 13:01 bm3d_src\
目录 0 2018-12-17 15:06 bm3d_src\.vs\
文件 44 2018-12-17 13:01 bm3d_src\.vs\ProjectSettings.json
文件 114 2018-12-17 15:06 bm3d_src\.vs\VSWorkspaceState.json
目录 0 2018-12-17 13:01 bm3d_src\.vs\bm3d_src\
目录 0 2018-12-17 15:06 bm3d_src\.vs\bm3d_src\v15\
文件 22016 2018-12-17 15:06 bm3d_src\.vs\bm3d_src\v15\.suo
文件 6287360 2018-12-17 15:06 bm3d_src\.vs\bm3d_src\v15\Browse.VC.db
目录 0 2018-12-17 13:01 bm3d_src\.vs\bm3d_src\v15\ipch\
目录 0 2018-12-17 13:02 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\
目录 0 2018-12-17 13:05 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\125b3706f1ad177c\
文件 32309248 2018-12-17 13:05 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\125b3706f1ad177c\UTILITIES.ipch
目录 0 2018-12-17 13:05 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\4125cd27a26487a9\
文件 33357824 2018-12-17 13:05 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\4125cd27a26487a9\MAIN.ipch
目录 0 2018-12-17 13:02 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\937b23f2080d25da\
文件 35127296 2018-12-17 13:02 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\937b23f2080d25da\BM3D.ipch
目录 0 2018-12-17 13:02 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\dcea950fba765a45\
文件 24379392 2018-12-17 13:02 bm3d_src\.vs\bm3d_src\v15\ipch\AutoPCH\dcea950fba765a45\LIB_TRANSFORMS.ipch
文件 77824 2018-12-17 15:06 bm3d_src\.vs\slnx.sqlite
文件 1100 2011-12-15 21:32 bm3d_src\Makefile
文件 3372 2012-04-13 22:34 bm3d_src\README.txt
文件 54878 2012-04-14 00:36 bm3d_src\bm3d.cpp
文件 4788 2012-04-13 23:35 bm3d_src\bm3d.h
文件 22401 2010-09-07 21:03 bm3d_src\io_png.c
文件 753 2010-09-07 21:03 bm3d_src\io_png.h
文件 13021 2012-04-13 23:08 bm3d_src\lib_transforms.cpp
文件 1500 2012-04-13 23:08 bm3d_src\lib_transforms.h
文件 6889 2012-04-13 23:09 bm3d_src\main.cpp
文件 5065 2010-09-18 07:30 bm3d_src\mt19937ar.c
文件 250 2010-09-18 07:30 bm3d_src\mt19937ar.h
文件 21659 2012-04-13 23:09 bm3d_src\utilities.cpp
............此处省略1个文件信息
评论
共有 条评论