【频谱总变异去噪算法】通过全变异最小化去噪受激拉曼光谱图像研究(Matlab代码实现)

本文介绍了一种用于高速相干拉曼散射成像(SRS)的去噪算法,通过空间-波长总变分法显著提高信噪比,特别适用于生物组织成像。算法通过自动估计噪声水平优化正则化,结果显示在稀释溶液和生物组织中分别提升了57倍和15倍的信噪比,增强了光谱解析能力。

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文献


💥1 概述

高速相干拉曼散射成像通过可视化目标分子或细胞内细胞器的时空动力学,为揭示细胞机制开辟了一条新途径。通过以兆赫兹调制频率从激光器中提取信号,电流激发拉曼散射(SRS)显微镜已达到散粒噪声限制的检测灵敏度。SRS显微镜中基于激光的本振不仅可以产生高水平的信号,还可以产生较大的散粒噪声,从而降低图像质量和光谱保真度。在这里,我们展示了一种去噪算法,该算法通过总变异最小化来消除空间和光谱域中的噪声。对于稀释的二甲基亚砜溶液,SRS光谱图像的信噪比提高了57倍,对于生物组织,SRS光谱图像的信噪比提高了15倍。最初埋藏在噪声中的目标分子的弱拉曼峰被解开。将去噪算法与多变量曲线分辨率相结合,可以区分秀丽隐杆线虫中富含蛋白质的细胞器的脂肪储存。总之,我们的方法在没有帧平均的情况下显着提高了检测灵敏度,这对于体内光谱成像非常有用。

相干拉曼散射显微镜是用于活细胞或组织成分和/或动态分析的新兴平台。单色相干拉曼技术,包括相干反斯托克斯拉曼散射(CARS)和受激拉曼散射(SRS),已达到视频速率成像速度(1, 2)并允许绘制已知物种的地图。(3-5)通过多重激发/检测实现的CARS和SRS光谱成像(6-12)和拉曼位移扫掠(13-18)在几毫秒或微秒内获取每个像素的振动光谱,从而允许对生命系统进行成分分析。虽然CARS显微镜需要进一步的光谱检索过程才能从非共振背景中提取拉曼信号,但SRS显微镜会产生振动光谱,再现自发拉曼光谱图。目前的SRS检测方案以兆赫兹频率调制一个激光器,并通过锁相放大器解调另一个激光器(定义为本振)中的微小强度变化,通常约为0.01%或更小(19)或谐振电路。(20)强大的本振(通常在光电二极管上为几毫瓦)不仅提高了信号电平,而且还会产生大量的散粒噪声,从而降低图像质量和光谱保真度。每像素或帧平均的积分时间更长,可以提高信噪比(SNR),但代价是牺牲成像速度。在这项工作中,我们展示了一种后处理算法,该算法可有效降低频谱和空间维度上的噪声,同时保留SRS信号。

去噪是图像处理文献中一个经过充分研究的主题。在过去的几十年里,已经提出了许多算法,例如,双边滤波器,(21)非本地 (NL) 是指,(22)三维块匹配 (BM3D),(23)等。(24, 25)大多数去噪算法都是为2D图像设计的。对于更高维度的数据,例如视频,沿第三维度的一致性是一个挑战。为了解决这个问题,Chan等人报告了一种时空总变分方法,以确保视频的时间一致性。(26)通过假设所有帧的噪声水平恒定,该算法使用全局参数来调节最小二乘目标函数和总变异正则化。

在这项研究中,我们将Chan等人的时空总变分方法推广为用于SRS光谱图像去噪的空间-波长总变分方法。挑战在于,对于SRS光谱图像,在时空总变化中做出的恒定噪声假设(26)不再成立,因为每个光谱通道的散粒噪声与激光功率的平方根成正比。我们通过开发一种光谱变化的全变去噪算法来克服这个问题。这种新算法称为频谱总变化(STV),可自动估计每帧的噪声,并根据噪声水平应用新的正则化。我们表明,STV能够将SRS图像的SNR提高多达57倍,并从光谱上解开最初埋在噪声中的目标分子的弱拉曼峰。与其他去噪方法(包括基准奇异值分解 (SVD))相比,(27, 28)STV 表现出明显更好的性能。

📚2 运行结果

文献结果:

主函数代码:

clear all
close all
clc

addpath(genpath('./spectral_tv/'));

sel_exp     = 2;  % select an experiment (1 or 2)

% Set the number of rows, columns and frames.
M           = 128;
N           = 128;
K           = 50;

% Load a hyperspectral image (DMSO100%)
file_name   = '../data/DMSO100%.tif';
hyper_true  = read_hyperdata(file_name, M, N, K);
[rows, cols, frames] = size(hyper_true);

% Add noise in the hyperspectral image
if sel_exp==1
    tmp        = read_hyperdata('../data/DMSO10%.tif', M, N, K);
    sigma_true = estimate_noise_level(tmp);
elseif sel_exp==2
    sigma_true = 0.005:0.005:(0.005*frames);
end
hyper_noisy = zeros(rows, cols, frames);
for i=1:frames
    hyper_noisy(:,:,i) = hyper_true(:,:,i) + sigma_true(i)*randn(rows, cols);
end


% Spectral Total Variation
opts.beta   = [1 1 0.1];
runtime     = tic;
out_stv     = spectral_tv(hyper_noisy, opts);
runtime_stv = toc(runtime);
sigma_est   = out_stv.sigma;
psnr_stv    = psnr(hyper_true, out_stv.f);


% Original Total Variation
mu          = 1;
opts.w      = mean(out_stv.w(:));
opts.beta   = [1 1 0.1];
runtime     = tic;
out_tv      = deconvtvl2(hyper_noisy, 1, mu, opts);
runtime_tv  = toc(runtime);
psnr_tv     = psnr(hyper_true, out_tv.f);


% Print PSNRs between true and denoised images.
fprintf('Method: spectral tv, \t psnr: %6.4f, \t runtime: %6.4f\n', psnr_stv, runtime_stv);
fprintf('Method: original tv, \t psnr: %6.4f, \t runtime: %6.4f\n', psnr_tv, runtime_tv);

% Plot the true and estimeated noise level.
if sel_exp==1 || sel_exp==2
    figure;
    plot(sigma_true, 'LineWidth', 2, 'Color', 'g');
    hold on;
    plot(sigma_est, 'LineWidth', 2, 'Color', 'r');
    hold off;
    xlabel('frame');
    ylabel('noise standard deviation');
    legend('True', 'Estimated', 'Location', 'best');
end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文献

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值