5-2图像处理经典案例:正弦噪声图像去噪

学习目标:  图像处理经典案例  去除噪声  

1.简述

图像降噪的英文名称是Image Denoising, 图像处理中的专业术语。是指减少数字图像中噪声的过程,有时候又称为图像去噪。图像的噪声来源相对复杂,搞清楚图像噪声的成因对我们进行图像去噪的工作有帮助。因为对于满足某些数学统计规律的噪声,那么逆向去除的时候就变得好办了。另外,深度学习技术很多也用在图像去噪领域,深度学习依赖数据,明白噪声的分布特点有利于制作数据集。

还有需要明确的是,对于图像噪声而言,本质并非是空域的,也就是说并不是该点相对于周边点显得突兀,就说该点是噪点。而是该点相对于连续时间内同一位置产生的不同点而言,如果误差较大,才能称之为噪点,即噪声本质是时域的。 那么,我们在计算图像某块区域的时候,有时候会用这块区域的平坦图像计算该区域的信噪比,其实也是用了一个潜在的假设:该平坦区域的各个点可以看做是中心点的连续时间内的集合。

噪声是图像干扰的重要原因。一幅图像在实际应用中可能存在各种各样的噪声,这些噪声可能在传输中产生,也可能在量化等处理中产生。根据噪声和信号的关系可将其分为三种形式:(f(x, y)表示给定原始图像,g(x, y)表示图像信号,n(x, y)表示噪声。)

1) 加性噪声,此类噪声与输入图像信号无关,含噪图像可表示为f(x, y)=g(x, y)+n(x, y),信道噪声及光导摄像管的摄像机扫描图像时产生的噪声就属这类噪声;

2) 乘性噪声,此类噪声与图像信号有关,含噪图像可表示为f(x, y)=g(x, y)+n(x ,y)g(x, y),飞点扫描器扫描图像时的噪声,电视图像中的相干噪声,胶片中的颗粒噪声就属于此类噪声。

3) 量化噪声,此类噪声与输入图像信号无关,是量化过程存在量化误差,再反映到接收端而产生。

目前来说图像去噪分为三大类:基于滤波器的方法(Filtering-Based Methods)、基于模型的方法(Model-Based Methods)和基于学习的方法(Learning-Based Methods)

上面是一种划分形式,下面让我们看一下另外一种划分方式,按照 sensor 成像过程划分:

  1. shot noise: 光子打在光敏传感器上经过光电效应产生电子,但是电子的产生是具有误差的。对于同一强度的光子,产生的电子大小的分布满足迫松分布的统计。这个误差带来的噪声称之为散粒噪声,即 shot noise。
  2. read noise:电子转换成电压,电压经模数转换器后读出具体数值,在读数的过程中产生的误差可以称之为读出噪声,即 read noise。我认为 read noise 广义来说包含了两块,一块是黑电平(暗电流),另一块则是满足高斯分布的噪声。
  3. 其他:这里简单的把其他噪声归结为一类,因为这类噪声基本上不满足统计规律,包括热噪声(传感器发热的产生的电子)、像素响应不均匀性(像素点对于光子响应的不均匀性)、量化噪声(读出电压为浮点型,需要转化为整型)、sensor 的固定噪声(与 sensor 的工艺相关)等等。

2.代码


%%  
close all;
clear all;
I=imread('cameraman.tif');
I=im2double(I);
%%   生成正弦噪声  
u=32;
v=-32;
d=0.3;
u1=2*pi*u/256;
v1=2*pi*v/256;
for j=1:256
    for k=1:256
        A(j,k)=d*sin(u1*j+v1*k);
    end
end
%%  叠加生成正弦噪声  
J=I+A;

F1=fft2(I);
F1am=abs(F1);
F1ph=angle(F1);
F11=fftshift(F1);
F11am=abs(F11);
F2=fft2(J);
F2am=abs(F2);
F2ph=angle(F2);
F22=fftshift(F2);
F22am=abs(F22);
subplot(2,3,1),imshow(I);title('原图像');
subplot(2,3,2),imshow(J);title('叠加正弦噪声后的图像');
subplot(2,3,4),imshow(0.25*log10(1+F11am));
subplot(2,3,5),imshow(0.25*log10(1+F22am));

%%   交互式复原图像  
F2am0=F2am(1,1);
F2am(1,1)=0;
thresh=max(F2am(:));
for j=1:1:256
    for k=1:1:256
        if F2am(j,k)>thresh/2
            F2am(j,k)=0;
        end
    end
end
F2am(1,1)=F2am0;
R=F2am.*exp(i*F2ph);
R2=fftshift(R);
R2am=abs(R2);
subplot(2,3,3),imshow(abs(ifft2(R)));title('复原后的图像')
subplot(2,3,6),imshow(0.25*log10(1+R2am));
F3am=abs(fftshift(fft2(J)));
figure;
imshow(0.25*log10(1+F3am));


3.运行结果

2437b2ab0f834eb3834fbb77f396ed20.png

 050eeba8b7f3441994a2a02e0e3b779a.png

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DDS(Direct Digital Synthesis)直接数字合成技术是一种数字信号处理技术,用于产生高精度、高稳定度、高分辨率的周期性信号。DDS技术的主要思路是:将一个固定的参考频率信号和一个可变的相位调制信号相乘,从而产生所需频率的输出信号。 在MATLAB中,我们可以通过使用内置函数sin()来生成正弦波信号。例如,我们可以生成一个频率为10 Hz,振幅为1的正弦波信号,并将其绘制成图形: ``` t = 0:0.001:1; x = sin(2*pi*10*t); plot(t,x); ``` 在Verilog中,我们可以使用DDS模块来生成正弦波信号。以下是一个简单的DDS模块: ``` module dds( input clk, //时钟信号 input reset, //复位信号 output reg [7:0] sin_out //正弦波输出信号 ); reg [31:0] phase_acc; //相位累加器 reg [7:0] sin_lut [0:255]; //正弦波查找表 //初始化正弦波查找表 initial begin for (i = 0; i < 256; i = i + 1) begin sin_lut[i] = $signed(127*sin(2*3.14159*i/256)); end end always @(posedge clk) begin if (reset) begin phase_acc <= 0; sin_out <= 0; end else begin phase_acc <= phase_acc + 100; //相位累加器步进为100 sin_out <= sin_lut[phase_acc[31:24]]; //从查找表中读取正弦波值 end end endmodule ``` 在这个DDS模块中,我们使用相位累加器来控制正弦波的频率,使用查找表来存储正弦波的值。在时钟上升沿时,相位累加器步进100,从查找表中读取正弦波值,并将其输出。 需要注意的是,在这个DDS模块中,我们使用了固定的步进值100。如果我们想要生成不同频率的正弦波信号,我们需要改变步进值。例如,如果我们想要生成频率为1 kHz的正弦波信号,我们需要将步进值改为1000*256/时钟频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素馨堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值