基于图matlab的图像处理

图形处理

简单原理:
首先我们会得到一张模糊的有瑕疵的照片,我们的任务是采用各种可以的方法,对图像进行复原。
一些简单原理
1.灰度图像只有两个通道,所以灰度图像不能转换为rgb等图像

图像退化

g(x,y)=Hf(x,y)+n(x,y)

噪声类型

一、加性噪声

1.高斯噪声

clear all;
close;
I=imread('lighthouse.png');
imshow(I);
gs=I;
I_n=imnoise(gs,'gaussian',0,0.2);%加入均值为0,方差为0.01的高斯噪声,生成含高斯噪声的图像
len=10;
theta=25;
initpsf=fspecial('motion',len,theta);  %%H = fspecial('motion', len, theta); 返回一个运动滤波器,该滤波器与图像卷积之后,得到的图像是相机经过逆时针旋转theta度(单位为角度),运动的距离为len(单位为像素)拍到的运动图像。len默认值为9, theta默认值为0,表示相机水平运动9像素。sum(H(:)) = 1。该滤波器的大小随着参数的不同而变化,且中心对称。原文链接:https://blog.csdn.net/cjsh_123456/article/details/79269864
I_b=imfilter(I_n,initpsf,'same'); ##对任意类型数组或多维图像进行滤波
figure;
subplot(1,3,1),imshow(I,[]);title('原图像');  %显示直方图均衡化的图像
subplot(1,3,2),imshow(I_n,[]); title('图像加高斯噪声');%对图像进行高斯滤波去噪处理
subplot(1,3,3),imshow(I_b,[]); title('图像进行高斯滤波去噪处理');%对图像进行高斯滤波去噪处理

在这里插入图片描述

2.椒盐噪声
个别像素有噪声时使用

clear all;
close;
I=imread('lighthouse.png');
gr=rgb2gray(I);  ##只能将其他类型的图像转化为gray
jy=double(gr);   #将gr转变为double型
I1=jy./max(jy(:));  ##将图像的取值范围变到[,1]
var=0.5; 
I_jy=imnoise(I1,'salt & pepper',var);   #生成方差为0.5的椒盐噪声图像
% Iall=[I,gr,I_jy]; 
% figure;imshow(I2)
% figure;imshow(Iall)
subplot(2,3,1);imshow(I);title('原图');
subplot(2,3,2);imshow(gr);title('灰度图像');
subplot(2,3,3);imshow(I_jy);title('噪声图像');  #这里是对灰度图像加躁,也可对rgb图加躁
  ##对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图。
subplot(2,3,4);imhist(I);title('原图直方图像');
subplot(2,3,5);imhist(gr);title('灰度直方图像');
subplot(2,3,6);imhist(I_jy);title('噪声图像直方图像');
J=histeq(gr);%直方图均衡化%%%%%
figure;
subplot(1,2,1),imshow(J,[]);title('直方图均衡化的图像');  %显示直方图均衡化的图像
subplot(1,2,2),imhist(J); title('图像J的直方图');  %显示图像J的直方图

qz=medfilt2(I_jy,[3,3]);  ##中值滤波去躁
subplot(1,2,1),imshow(gr,[]);title('原图'); 
subplot(1,2,2),imshow(qz); title('中值滤波去噪图'); 

直方图:是以图形化参数来显示图片曝光精确度的手段,其描述的是图片显示范围内影像的灰度分布曲线。它可以帮助分析图片的曝光水平等一些信息。直方图的左边显示了图像的阴影信息,直方图的中间显示了图像的中间色调信息,直方图的右边显示了图像的高亮信息。直方图的横轴从左到右代表照片从黑(暗部)到白(亮度)的像素数量,其左边最暗处的Level值为0,而右边最亮处的Level值为255。直方图的垂直轴方向代表了在给定的Level值下的像素的数目。图像直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图。
直方图均衡化是非常有用的一种变换,直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图
像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。

直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。
原文链接:https://blog.csdn.net/sunmc1204953974/article/details/50606395
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PM平滑处理

原理:
1.先来说一说函数利用导数求极值的问题:对于一元函数,求其局部极值问题一般就是求二阶导数;对于多元函数,其极值问题一般对其Taylar展开进行研究,求其Hessian矩阵,该矩阵小于0,则有极大值;而对于泛函(把一个函数映射到数值上的一类变换),求其导数(这里称为Gayeaux导数)也就是求泛函L(f)在f方向上的Gateaux导数的问题(就是求一个极限),进而由导数就可以得出局部极值。
2.能量最小化与最陡下降法
最陡下降法是为了求泛函极小值而提出,这里有时间再来补图片。可以看出的是,问题转化为求两个互相逼近的点的函数值的问题。函数值下降最快的方向是其负梯度的方向(大一学过,只记得有这么一个结论原理是啥我也忘了),反正这里的最陡下降法的提出也是为了泛函的极小值问题。
3.热传导方程的变分模型
这后面还真的需要公式了。先写论文再补。

% Usage:
%  diff = anisodiff(im, niter, kappa, lambda, option)
%
% Arguments:
%         im     - input image  放入图像
%         niter  - number of iterations. 迭代次数
%         kappa  - conduction coefficient 20-100 ? K的取值(在20-200之间)
%         lambda - max value of .25 for stability (平稳性选择最大值为0.25)
%         option - 1 Perona Malik diffusion equation No 1 (PM扩散,可以选择方程1或2)
%                  2 Perona Malik diffusion equation No 2
%
% Returns:
%         diff   - diffused image.
%
% kappa controls conduction as a function of gradient.  If kappa is low
% small intensity gradients are able to block conduction and hence diffusion
% across step edges.  A large value reduces the influence of intensity
% gradients on conduction.
%
% lambda controls speed of diffusion (you usually want it at a maximum of
% 0.25)
% Diffusion equation 1 favours high contrast edges over low contrast ones.
% Diffusion equation 2 favours wide regions over smaller ones.
function diff = anisodiff1(im, niter, kappa, lambda, option)

if ndims(im)==3
  error('Anisodiff only operates on 2D grey-scale images');
end

im = double(im);
[rows,cols] = size(im);
diff = im;

for i = 1:niter
  diffl = zeros(rows+2, cols+2);
  diffl(2:rows+1, 2:cols+1) = diff;
  % 对四个方向进行差分
  deltaN = diffl(1:rows,2:cols+1)   - diff;
  deltaS = diffl(3:rows+2,2:cols+1) - diff;
  deltaE = diffl(2:rows+1,3:cols+2) - diff;
  deltaW = diffl(2:rows+1,1:cols)   - diff;
  % Conduction
  if option == 1
    cN = exp(-(deltaN/kappa).^2);
    cS = exp(-(deltaS/kappa).^2);
    cE = exp(-(deltaE/kappa).^2);
    cW = exp(-(deltaW/kappa).^2);
  elseif option == 2
    cN = 1./(1 + (deltaN/kappa).^2);
    cS = 1./(1 + (deltaS/kappa).^2);
    cE = 1./(1 + (deltaE/kappa).^2);
    cW = 1./(1 + (deltaW/kappa).^2);
  end
  diff = diff + lambda*(cN.*deltaN + cS.*deltaS + cE.*deltaE + cW.*deltaW);
end
%fprintf('\n');

测试函数:

clear all;
close;
I=imread('lighthouse.png');
gr=rgb2gray(I);
gs=gr;
I_n=imnoise(gs,'gaussian',0,0.2);%加入均值为0,方差为0.01的高斯噪声,生成含高斯噪声的图像
niter = 20;
kappa = 100;%越大越平滑
lambda = 0.25;%越大越平滑
option = 1;
out = anisodiff1(I_n, niter, kappa, lambda, option);
subplot(1,3,1);imshow(gr);title("灰度图");
subplot(1,3,2);imshow(I_n);title("加入高斯噪声的图像");
subplot(1,3,3);imshow(out/255);title("进行平滑后的图像");

在这里插入图片描述

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值