Digital image processing-点运算

最近在学斯坦福的数字图像处理,感觉真的无论是课件还是习题都太棒了,想记录下自己这一段的成长历程。

1.针对降噪的带噪图像相加

这里主要用了这样的一个定理:对M副加性噪声图像进行平均,可以使图像的平方信噪比提高M倍。
证明过程如下:
D i ( x , y ) = S ( x , y ) + N i ( x , y )  where  E { N i ( x , y ) } = 0 D_{i}(x, y)=S(x, y)+N_{i}(x, y) \text { where } E\left\{N_{i}(x, y)\right\}=0 Di(x,y)=S(x,y)+Ni(x,y) where E{Ni(x,y)}=0
其中信噪比为
P ( x , y ) = S 2 ( x , y ) E { N 2 ( x , y ) } P(x, y)=\frac{S^{2}(x, y)}{E\left\{N^{2}(x, y)\right\}} P(x,y)=E{N2(x,y)}S2(x,y)
D ‾ ( x , y ) = 1 M ∑ i = 1 M [ S ( x , y ) + N i ( x , y ) ] P ‾ ( x , y ) = S 2 ( x , y ) E { 1 M 2 [ ∑ i = 1 M N i ( x , y ) ] 2 } \begin{aligned} \overline{D}(x, y)=& \frac{1}{M} \sum_{i=1}^{M}\left[S(x, y)+N_{i}(x, y)\right] \\ \overline{P}(x, y)=& \frac{S^{2}(x, y)}{E\left\{\frac{1}{M^{2}}\left[\sum_{i=1}^{M} N_{i}(x, y)\right]^{2}\right\}} \end{aligned} D(x,y)=P(x,y)=M1i=1M[S(x,y)+Ni(x,y)]E{M21[i=1MNi(x,y)]2}S2(x,y)
E { [ N 1 ( x , y ) + N 2 ( x , y ) ] 2 } = E { N 1 2 ( x , y ) + N 2 2 ( x , y ) } + 2 E { N 1 ( x , y ) } ε { N 2 ( x , y ) } E\left\{\left[N_{1}(x, y)+N_{2}(x, y)\right]^{2}\right\}=E\left\{N_{1}^{2}(x, y)+N_{2}^{2}(x, y)\right\}+2 E\left\{N_{1}(x, y)\right\} \varepsilon\left\{N_{2}(x, y)\right\} E{[N1(x,y)+N2(x,y)]2}=E{N12(x,y)+N22(x,y)}+2E{N1(x,y)}ε{N2(x,y)}
由于 N 1 N_1 N1 N 2 N_2 N2独立
E { [ N 1 ( x , y ) + N 2 ( x , y ) ] 2 } = E { N 1 2 ( x , y ) } + E { N 2 2 ( x , y ) } E\left\{\left[N_{1}(x, y)+N_{2}(x, y)\right]^{2}\right\}=E\left\{N_{1}^{2}(x, y)\right\}+E\left\{N_{2}^{2}(x, y)\right\} E{[N1(x,y)+N2(x,y)]2}=E{N12(x,y)}+E{N22(x,y)}
所以
P ‾ ( x , y ) = M 2 S 2 ( x , y ) ∑ i = 1 M N i 2 ( x , y ) = M 2 S 2 ( x , y ) M N 2 ( x , y ) = M P ( x , y ) \overline{P}(x, y)=\frac{M^{2} S^{2}(x, y)}{\sum_{i=1}^{M} N_{i}^{2}(x, y)}=\frac{M^{2} S^{2}(x, y)}{M N^{2}(x, y)}=M P(x, y) P(x,y)=i=1MNi2(x,y)M2S2(x,y)=MN2(x,y)M2S2(x,y)=MP(x,y)

这里我们是可以用Matlab代码来实现这个效果的,具体代码如下:

function[]= mygaussian()
clear, clc, close all

% Load test image
img = im2double(rgb2gray(imread('quadnight.jpeg')));

% Loop over number of samples
nArray = [1, 2, 8, 32];
for i = 1 : numel(nArray)
    N = nArray(i);
    avgImg = zeros(size(img));
    
    % Add Gaussian noise, accumulate average image
    for j = 1 : N
        noisyImg = imnoise(img, 'gaussian', 0, 0.02);
        avgImg = avgImg + noisyImg;
    end % end j
    
    % Show image
    avgImg = avgImg / N;
    subplot(2, 2, i);
    imshow(avgImg);
    title([num2str(N), ' image(s)']);
    imwrite(avgImg, ['Image_Averaging_', num2str(N), 'avg.png']);

代码是从斯坦福老师那里直接摘得,感觉国外的老师真的是很不一样的,代码都写的很漂亮,简单的介绍一下这个函数的实现过程吧,首先将图片转化为灰度图像,然后转化为double,主要是为了防止溢出,nArray表示用多少个图相加,g=imnoise(f,'gaussian',m,var)将均值m,方差为var的高斯噪声加到图像f上,默认值是均值m为0,方差var为0.01的噪声。
我们可以看一下效果
在这里插入图片描述
可以看出来,真的变清楚了很多。

2.不同曝光度图像的整合

3.图像的减法

图像的减法主要用来是发现两幅图片的区别。

function[]=imgSub()

clear, clc, close all

% Load test images
maskImg = im2double(imread('mask.jpg'));
liveImg = im2double(imread('live.jpg'));

% Calculate difference image and enhance contrast
diffImg = abs(maskImg - liveImg);
histeqDiffImg = adapthisteq(diffImg, 'ClipLimit', 0.005);

% Show images
subplot(1, 4, 1), imshow(liveImg);
title('Live image');
subplot(1, 4, 2), imshow(maskImg);
title('Mask image');
subplot(1, 4, 3), imshow(diffImg);
title('Difference image');
subplot(1, 4, 4), imshow(histeqDiffImg);
title('Histogram equalized difference image');

% Save images
imwrite(diffImg, 'Image_Subtraction_diff.png');
imwrite(histeqDiffImg, 'Image_Subtraction_histeqdiff.png');

adapthisteq函数执行所谓的对比度受限的自适应直方图均衡,其用法 https://blog.csdn.net/Sousky/article/details/73484691 介绍的十分的清楚。
在这里插入图片描述
下面减法的运用就更厉害了!下面这个算法是检验一个视频中出现的异物的算法。

function[]= videoSub()
% Read video
vrObj = VideoReader('surveillance.mpg');
vwObj = VideoWriter('Background_Subtraction', 'Motion JPEG AVI');
%设置写的文件的播放速率
vwObj.FrameRate = 30;
vwObj.Quality = 95;
open(vwObj); 
%获取读的文件的帧数   
nFrames = vrObj.NumberOfFrames;

% Perform background accumulation and subtraction
alpha = 0.95;
theta = 0.1;
background = im2double(rgb2gray(read(vrObj, 1)));
for i = 1 : nFrames
    
    currImg = im2double(rgb2gray(read(vrObj, i)));
    background = alpha * background + (1 - alpha)* currImg; 
    
    diffImg = abs(currImg - background);
    %0-1矩阵
    threshImg = diffImg > theta;
    
    subplot(2, 2, 1), imshow(currImg), title('New frame');
    subplot(2, 2, 2), imshow(background), title('Background frame');
    subplot(2, 2, 3), imshow(diffImg), title('Difference image');
    subplot(2, 2, 4), imshow(threshImg), title('Thresholded difference image');
    
    currFrame = getframe(1);
    writeVideo(vwObj, currFrame);
end
close(vwObj);

% Save images
imwrite(currImg, 'Background_Subtraction_curr.png');
imwrite(background, 'Background_Subtraction_background.png');
imwrite(threshImg, 'Background_Subtraction_thresh.png');
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值