• 大小: 5.27MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-23
  • 语言: 其他
  • 标签: 全变差  去噪  

资源简介

实现全变差去噪(split bregman)使用opencv实现

资源截图

代码片段和文件信息

#include “subfunction.h“

#define SIGAMA 15

/**************initialization***************/
Mat   Image = imread(“E:/pic/lena.png“ 0);
Size  sizeg = Image.size();
int   iter = 1;
int   col = Image.cols;
int   row = Image.rows;
double err = 1.0f;
double tol = 0.001f;
float mu = 0.05f;
float lambda = 2 * mu;
float gamma = lambda / mu;
Mat   dx = Mat::zeros(sizeg CV_32FC1);
Mat   dy = Mat::zeros(sizeg CV_32FC1);
Mat   bx = Mat::zeros(sizeg CV_32FC1);
Mat   by = Mat::zeros(sizeg CV_32FC1);
Mat   I = Mat::ones(sizeg CV_32FC1);
Mat   D1 = (Mat_(1 2) << 1 -1);
Mat   D2 = (Mat_(2 1) << 1 -1);
Mat   X = Mat::zeros(sizeg CV_32FC1);
Mat   Y = Mat::zeros(sizeg CV_32FC1);
Mat   Dux = Mat::zeros(sizeg CV_32FC1);
Mat   Duy = Mat::zeros(sizeg CV_32FC1);
Mat   noise = Mat::zeros(Image.size() CV_32FC1);
Mat   g temp1 temp2 temp3 temp4 u Dx Dy conjDx conjDy up Fg FabsDx FabsDy Fu c dtemp[2];

/********************************************/

int main(){
system(“color 4F“);
if (Image.empty()) {
cout << “Couldn‘t read E://lena.jpg“ << endl;
return -1;
}

Image.convertTo(Image CV_32FC1);
randn(noise 0 SIGAMA);
g = noise + Image;
Dx = psf2otf(D1 sizeg);
Dy = psf2otf(D2 sizeg);
conjDx = conj(Dx);
conjDy = conj(Dy);
Fg = fft2(g);
split(Dx temp);
magnitude(temp[0] temp[1] FabsDx);
split(Dy temp);
magnitude(temp[0] temp[1] FabsDy);
pow(FabsDx 2 FabsDx);//取模值的平方
pow(FabsDy 2 FabsDy);//取模值的平方
u = g;
while (err > tol){
u.copyTo(up);
/**********updata U************/
X = dx - bx;
Y = dy - by;
temp1 = fft2(X);
temp2 = fft2(Y);
temp1 = complexMul(conjDx temp1);
temp2 = complexMul(conjDy temp2);
temp3 = gamma*(temp1 + temp2) + Fg;
temp4 = gamma*(FabsDx + FabsDy) + I;
split(temp3 temp);
temp[0] = temp[0] / temp4;
temp[1] = temp[1] / temp4;
merge(temp 2 Fu);
dft(Fu Fu DFT_INVERSE + DFT_SCALE);
split(Fu temp);
u = temp[0];
/********updata dxdy*********/
Dux = diffX(u);
Duy = diffY(u);
temp1 = Dux + bx;
temp2 = Duy + by;
dx = softThreshold(temp1 lambda);
dy = softThreshold(temp2 lambda);
/********updata bxby*********/
bx = bx + Dux - dx;
by = by + Duy - dy;
/********updata error*********/
err = norm(u - up) / norm(u);
cout << “iter. = “ << iter << “  err.=“ << err << endl;
iter = iter + 1;
}
double PSNROut = PSNR(Image u);
double PSNRIn = PSNR(Image g);
cout << “PSNRIn = “ << PSNRIn << endl;
cout << “PSNROut = “ << PSNROut << endl;

displayImage(Image “Original Image“);
displayImage(g “Noise Image“);
displayImage(u “Denoise Image“);
waitKey(0);

system(“pause“);
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-05-18 09:45  SB_ATV\
     目录           0  2016-05-17 17:42  SB_ATV\Debug\
     文件      134656  2016-05-17 22:41  SB_ATV\Debug\SB_ATV.exe
     文件     1073208  2016-05-17 22:41  SB_ATV\Debug\SB_ATV.ilk
     文件     1739776  2016-05-17 22:41  SB_ATV\Debug\SB_ATV.pdb
     目录           0  2016-05-17 22:41  SB_ATV\SB_ATV\
     目录           0  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\
     文件        2401  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.log
     目录           0  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\
     文件       26368  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\CL.read.1.tlog
     文件        1210  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\CL.write.1.tlog
     文件         160  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\SB_ATV.lastbuildstate
     文件        1242  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\cl.command.1.tlog
     文件        2202  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\link.command.1.tlog
     文件        5328  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\link.read.1.tlog
     文件         486  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\SB_ATV.tlog\link.write.1.tlog
     文件      328187  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\main.obj
     文件      296842  2016-05-17 17:42  SB_ATV\SB_ATV\Debug\subfunction.obj
     文件      658432  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\vc120.idb
     文件      946176  2016-05-17 22:41  SB_ATV\SB_ATV\Debug\vc120.pdb
     文件        4378  2016-05-16 17:05  SB_ATV\SB_ATV\SB_ATV.vcxproj
     文件        1164  2016-05-16 17:05  SB_ATV\SB_ATV\SB_ATV.vcxproj.filters
     文件        2762  2016-05-17 22:41  SB_ATV\SB_ATV\main.cpp
     文件        5316  2016-05-16 17:05  SB_ATV\SB_ATV\subfunction.cpp
     文件         496  2016-05-17 17:42  SB_ATV\SB_ATV\subfunction.h
     文件    14876672  2016-05-18 09:45  SB_ATV\SB_ATV.sdf
     文件         964  2016-05-16 17:02  SB_ATV\SB_ATV.sln
     文件       22016  2016-05-18 09:45  SB_ATV\SB_ATV.v12.suo

评论

共有 条评论