function [Im_ori,Im_noisy,Im_final] = FPPAAnalysis(PicFileName,NoiseLevel,lambda, mu, K) % *Read Image* [Im_ori,map] = imread(PicFileName); Im_ori= ind2gray(Im_ori,map); %% % *4.2 Implementation of adding Gaussian noise* sigma = (NoiseLevel*NoiseLevel)/(255 * 255); Im_noisy = imnoise(Im_ori, 'gaussian', 0, sigma); Im_noisy = im2double(Im_noisy); %% % *For a given vectorized image x∈Rd (d = m * n), let X = mat(x) :* % % In this case,literally nothing we can do, X is just Im_noisy or v. [m, n] = size(Im_noisy); d = m*n; v = reshape(Im_noisy, [], 1); X = im2double(reshape(v, [m, n]) ); I2d_lambda_BBT = cal_I2d_lambda_BBT(m,n,lambda); prox_phi = @(x, mu) max(abs(x) - mu, 0).*sign(x); %proximity算子 Bx0 = cal_Bx_by_x(X,m,n); Bx = Bx0; Y = Bx0; % Fixed-point proximity algorithm for k = 1:K % 先计算更新的 Bx + (I2d − λBBT) * y[k−1] % tBTY = cal_Bty_by_y(Y,m,n); % 计算 B' * y % tu = double(v) - lambda*tBTY; % 更新u % tX = reshape(tu, [m, n]); % 更新 X % Bx = cal_Bx_by_x(tX,m,n); % 更新Bx/Bu/Bv factor = Bx + I2d_lambda_BBT * Y; Y = factor - prox_phi(factor, mu/lambda); % Apply the proximity operator here end %% [BTY] = cal_Bty_by_y(Y,m,n); u = double(v) - lambda*BTY; Im_final = reshape(u, [m, n]); end
时间: 2024-04-04 15:29:08 浏览: 73
gatbx-origin.zip_gatbx_gatbx matlab_gatbx-origin.zip_genetic_ori
这段代码实现了一种基于固定点投影算法(Fixed-Point Proximity Algorithm)的图像去噪方法。函数输入参数包括图像文件名PicFileName、噪声水平NoiseLevel、正则化参数lambda、惩罚因子mu以及迭代次数K。函数返回原始图像Im_ori、加噪图像Im_noisy以及去噪后的图像Im_final。
首先使用imread函数读取图像,并将其转换为灰度图像。然后使用imnoise函数向图像中添加高斯噪声,其中噪声方差sigma根据输入的噪声水平计算得到。接着将加噪图像转换为双精度型,并将其展平为一个向量v,再将向量v重新转换为图像矩阵X。
随后定义了一个函数prox_phi,用于计算基于L1范数的proximity算子。接着对Bx0进行了初始化,并使用固定点投影算法进行迭代,更新Bx(即X),并计算出Y。在每次迭代中,先计算更新的Bx + (I2d − λBBT) * y[k−1],然后计算B' * y,并根据更新后的结果计算出新的u和X,并更新Bx/Bu/Bv。最后将更新后的Y应用proximity算子,得到新的Bx,执行K次迭代后得到去噪后的图像Im_final。
阅读全文