图像_图像卡 - CSDN
  • MATLAB图像处理

    2018-10-22 21:38:06
    全面系统的学习MATLAB在图像处理中的应用
  • 先后就读于华中科技大学、中国科学院,先后就职于奇虎360AI研究院,陌陌深度学习实验室,6年计算机视觉从业经验,拥有丰富的传统图像算法和深度学习图像项目经验,著有畅销书《深度学习之图像识别:核心技术与案例...
  • Mask R-CNN是一种基于深度学习的图像实例分割方法,可对物体进行目标检测和像素级分割。 本课程将手把手地教大家使用VIA图像标注工具制作自己的数据集,并使用Mask R-CNN训练自己的数据集,从而能开展自己的图像...
  • Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用...
  • 系统的学习和掌握matlab图像复原和图像增强技术
  • 图像特征提取

    2017-01-03 16:38:12
    从本节开始, 我们将逐步从数字图像处理向图像识别过渡。 严格地说, 图像特征提取属于图像分析的范畴, 是数字图像处理的高级阶段, 同时也是图像识别的开始。本文主要包括以下内容 常用的基本统计特征, 如周长、...

    从本节开始, 我们将逐步从数字图像处理向图像识别过渡。 严格地说, 图像特征提取属于图像分析的范畴, 是数字图像处理的高级阶段, 同时也是图像识别的开始。

    本文主要包括以下内容

    • 常用的基本统计特征, 如周长、面积、均值等区域描绘子, 以及直方图和灰度共现矩阵等纹理描绘子
    • 主成份分析(PCA, PrincipaJ Component Analysis)
    • 局部二进制模式(LBP, LocaJ Binary Pattern)
    • 本章的典型案例分析
      • 基于PCA技术的人脸数据集的降维处理

    图像特征概述

    众所周知,计算机不认识图像,只认识数字。为了使计算机能够“理解”图像,从而具有真正意义上的“视觉”,本章我们将研究如何从图像中提取有用的数据或信息,得到图像的“非图像” 的表示或描述,如数值、向量和符号等。这一过程就是特征提取,而提取出来的这些“非图像”的表示或描述就是特征。有了这些数值或向量形式的特征我们就可以通过训练过程教会计算机如何懂得这些特征, 从而使计算机具有识别图像的本领。

    什么是图像特征
    特征是某一类对象区别于其他类对象的相应(本质)特点或特性, 或是这些特点和特性的集合。特征是通过测量或处理能够抽取的数据。对于图像而言, 每一幅图像都具有能够区别于其他类图像的自身特征,有些是可以直观地感受到的自然特征,如亮度、边缘、纹理和色彩等;有些则是需要通过变换或处理才能得到的, 如矩、直方图以及主成份等。

    特征向量及其几何解释
    我们常常将某一类对象的多个或多种特性组合在一起, 形成一个特征向量来代表该类对象,如果只有单个数值特征,则特征向量为一个一维向量,如果是n个特性
    的组合,则为一个n维特征向量。该类特征向量常常作为识别系统的输入。实际上,一个n维特征就是位于n维空间中的点,而识别分类的任务就是找到对这个n维空
    间的一种划分。
    例如要区分3种不同的鸾尾属植物,可以选择其花瓣长度和花瓣宽度作为特征,这样就以1个2维特征代表1个植物对象,比如(5.1,3.5).如果再加上萼片长度和萼片宽度, 则每个鸾尾属植物对象由一个4维特征向置表示, 如(5.1, 3.5.1.4, 0.2)。

    特征提取的一般原则
    图像识别实际上是一个分类的过程,为了识别出某图像所属的类别,我们需要将它与其他不同类别的图像区分开来。这就要求选取的特征不仅要能够很好地描述图像, 更重要的是还要能够很好地区分不同类别的图像。
    我们希望选择那些在同类图像之间差异较小(较小的类内距),在不同类别的图像之间差异较大(较大的类间距)的图像特征, 我们称之为最具有区分能力(most discriminative)的特征。此外, 在特征提取中先验知识扮演着重要的角色, 如何依靠先验知识来帮助我们选择特征也是后面将持续关注的问题。

    特征的评价标准
    一般来说,特征提取应具体问题具体分析,其评价标准具有一定的主观性。然而,还是有一些可供遵循的普遍原则,能够作为我们在特征提取实践中的指导。总结如下。

    • 特征应当容易提取. 换言之, 为了得到这些特征我们付出的代价不能太大. 当然, 这还要与特征的分类能力权衡考虑.
    • 选取的特征应对噪声和不相关转换不敏感. 比如要识别车牌号码, 车牌照片可能是从各个角度拍摄的, 而我们关心的是车牌上字母和数字的内容, 因此就需要得到对几何失真变形等转换不敏感的描绘子, 从而得到旋转不变, 或是投影失真不变的特征.
    • 最重要的一点, 总是应试图寻找最具区分能力的特征.

    基本统计特征

    本节将主要介绍一些常用的基本统计特征, 包括一些简单的区域描绘子, 直方图及其统计特征, 以及灰度共现矩阵等.

    简单的区域描绘子及其Matlab实现

    在经过图像分割得到各种我们感兴趣的区域之后,可以利用下面介绍的一些简单区域描绘子作为代表该区域的特征。通常将这些区域特征组合成特征向量以供分类使用。

    常用的简单区域描绘子如下。

    • 周长:区域边界的长度, 即位于区域边界上的像素数目.
    • 面积:, 区域中的像素总数.
    • 致密性:(周长) 2/面积.
    • 区域的质心.
    • 灰度均值: 区域中所有像素的平均值.
    • 灰度中值: 区域中所有像素的排序中值.
    • 包含区域的最小矩形.
    • 最小或最大灰度级.
    • 大于或小于均值的像素数.
    • 欧拉数: 区域中的对象数减去这些对象的孔洞数。

    在Matlab中, 函数regionprops用于计算区域描绘子的有利工具, 其原型为:
    D = regionprops(L,properties)
    L是一个标记矩阵, 可通过8.3.4小节介绍的连通区标注函数bwlabel得到.
    properties可以是一个用逗号分割的字符串列表, 其一些常用取值如表10.1所示

    利用regionprops函数提取简单的区域特征

    I = imread('bw_mouth.bmp');
    I1 = bwlabel(I);
    D = regionprops(I1,'area','centroid');
    D.Area

    直方图及其统计特征

    首先来看纹理的概念。纹理是图像固有的特征之一,是灰度(对彩色图像而言是颜色)在空间以一定的形式变换而产生的图案(模式),有时具有一定的周期性。既然纹理区域的像素灰度级分布具有一定的形式,而直方图正是描述图像中像素灰度级分布的有力工具, 因此用直方图来描述纹理就顺理成章了。

    毫无疑问,相似的纹理具有相似的直方图;而由图10.2可见,3种不同特点的纹理对应3种不同的直方图。这说明直方图与纹理之间存在着一定的对应关系。因此,我们可以用直 方图或其统计特征作为图像纹理特征。直方图本身就是一个向量,向量的维数是直方图统计 的灰度级数,因此我们可以直接以此向量作为代表图像纹理的样本特征向量,从而交给分类器处理,对于LBP直方图就常常这样处理(见10.5节);另一种思路是进一步从直方图中提取出能够很好地描述直方图的统计特征,将直方图的这些统计特征组合成为样本特征向量, 这样做可以大大降低特征向量的维数。

    直方图的常用统计特征如下所述。


    一个由均值、标准差、平滑度和熵组合而成的特征向量如:v = (m,a, R, e)。
    应认识到直方图及其统计特征是一种区分能力相对较弱的特征,这主要因为直方图属于一阶统计特征,而它们的一阶统计特征是无法反映纹理结构的变化的。直方图与纹理的对应关系并不是一对一的:首先,不同的纹理可能具有相同或相似的直方图,如图10.3所示的两种截然不同的图案就具有完全相同的直方图;其次,即便是两个不同的直方m.也可能具有相同的统计特 征如均值、标准差等。因此,依靠直方图及其统计特征来作为分类特征时需要特别注意。

    灰度共现矩阵

    我们说灰度直方图是一种描述单个像素灰度分布的一阶统计量;而灰度共现矩阵描述的则是具有某种空间位置关系的两个像素的联合分布,可以看成是两个像素灰度对的联合直方图,是种二阶统计量。



    由于灰度共现矩阵总共含有LXL个元素,当灰度级L比较大时它将是一个庞大的方阵。如对于一般的256灰度图,凡就是一个256X256的矩阵,共216 个元素。如此庞大的矩阵将使后续的计算量剧增。因此普通灰度图像通常要经过处理以减少灰度级数,而后再计算灰度共现矩阵。可以通过分析纹理图像的直方图,在尽量不影响纹理质量的情况下.通过适当的灰度变换来达到灰度级压缩的目的。

    特征降维

    维度灾难

    最大值时,分类器的性能不是得到改善,而是退化。这种现象正是在模式识别中被称为“维度灾难”的一种表现形式。例如,我们要区分西瓜和冬瓜,表皮的纹理和长宽比例都是很好 的特征,还可以再加上瓜籽的颜色以辅助判断,然而继续加入重量、体积等特征可能是无益 的,甚至还会对分类造成干扰。
    基于以上所述原因,降维对我们产生了巨大的吸引力。在低维空间中计算和分类都将变 得简单很多,训练(教授分类器如何区分不同类样本的过程,详见第11章)所需的样本数目也会大大降低。通过选择好的特征,摒弃坏的特征(10.3.2特征选择),将有助于分类器性能的提升;在通过组合特征降维时,在绝大多数情况下,丢弃某些特征所损失的信息通过在低 维空间中更加精确的映射(10.3.3特征抽取)可以得到补偿。

    具体来说,降低维度又存在着两种方法:特征选择和特征抽取。如图10.8所示,特征选择是指选择全部特征的一个子集作为特征向量:特征抽取是指通过已有特征的组合建立一个 新的特征子集,10.3.2小节将要介绍的主成份分析方法(principa1component analysis, PCA)就是通过原特征的线性组合建立新的特征子集的一种特征抽取方法。

    特征选择简介

    重新回到10.1.3小节那个鸾尾属植物的问题。对于每一个莺尾属植物样本,总共有4个属性可以使用一一花瓣长度、花瓣宽度、萼片长度和萼片宽度。我们的目的是从中选择两个属性组成特征向量用于分类这3种鸾尾属植物。下面的Matlab程序选择了不同的特征子集,并给出了在对应特征空间中样本分布的可视化表示。

    load fisheriris;
    data = [meas(:,1),meas(:,2)];
    figure;
    scatter(data(1:50,1),data(1:50,2),'b+');
    hold on,scatter(data(51:100,1),data(51:100,2),'r*');
    hold on,scatter(data(101:150,1),data(101:150,2),'go');
    
    data = [meas(:,1),meas(:,3)];
    figure;
    scatter(data(1:50,1),data(1:50,2),'b+');
    hold on,scatter(data(51:100,1),data(51:100,2),'r*');
    hold on,scatter(data(101:150,1),data(101:150,2),'go');

    主成分分析(Princjpal Component Analysis, PCA)

    特征抽取是指通过已有特征的组合(变换)建立一个新的特征子集。在众多的组合方法当中,线性组合(变换)因其计算简单且便于解析分析的特点而显得颇具吸引力。下面就介绍一种通过特征的线性组合来实现降维的方法——主成分分析(principal conponent analysis.PCA)。PCA的实质就是在尽可能好地代表原始数据的前提下, 通过线性变换将高维空间中的样本数据投影到低维空间中

    具体可参见:降维算法学习
    为得到最小平方误差,应选取散布矩阵s的最大本征值所对应的本征向量作为投影直线e的方向。
    也就是说, 通过将全部n个样本向 以散布矩阵最大本征值对应的本征向量为方向的直线投影, 可以得到最小平方误差意义下这 n个样本的一维表示。

    PCA计算实例

    数据表示与数据分类
    通过PCA降维后的数据并不一定最有利于分类,因为PCA的目的是在低维空间中尽可能好地表示原数据,确切地说是在最小均方差意义下最能代表原始数据。而这一目的有时会和数据分类的初衷相违背。图10.13说明了这种情况,PCA投影后数据样本得到了最小均方意义 下的最好保留 , 但在降维后的一维空间中两类样本变得非常难以区分。图中还给出了一种适合于分类的投影方案,对应着另一种常用的降维方法-线性判别分析(linear discriminant analysis. LDA)。PCA寻找的是能够有效表示数据的主轴方向,而LDA则是寻找用来有效分类的投影方向。

    PCA的Matlab实现
    函数princomp实现了对PCA的封装, 其常见调用形式为:
    [COEFF,SCORE,latent]= princomp(X);
    X为原始样本组成n*d的矩阵,其每一行是一个样本特征向量,每一列表示样本特征向量的一维.如对于例10.2中的问题,X就是一个8*2的样本矩阵, 总共8个样本, 每个样本2维.
    COEFF: 主成份分量, 即变换空间中的那些基向量, 也是样本协方差矩阵的本征向量.
    SCORE: 主成份,X的低维表示, 即X中的数据在主成分分量上的投影(可根据需要取前面几列的).
    latent: 一个包含着样本协方差矩阵本征值的向量.

    快速PCA及其实现
    PCA的计算中最主要的工作量是计算样本协方差矩阵的本征值和本征向量。设样本矩阵 X大小为n*d (n个d维样本特征向量), 则样本散布矩阵(协方差矩阵) S将是一个dXd的方阵,故当维数d较大时计算复杂度会非常高。例如当维数d=1OOOO,S是一个10000*10000的矩阵,此时如果采用上面的princomp函数计算主成分,Matlab通常会出现内存耗尽的错误,即使有足够多的内存, 要得到S的全部本征值可能也要花费数小时的时间

    Matlab实现
    我们编写了fastPCA函数用来对样本矩阵A进行快速主成份分析和降维(降至k维),其输出pcaA为降维后的K维样本特征向量组成的矩阵, 每行一个样本, 列数K为降维后的样本特征维数,相当千princomp函数中的输出SCORE, 而输出V为主成份分量,好princomp函数中的COEFF

    function [pcaA V] = fastPCA( A, k )
    % 快速PCA
    %
    % 输入:A --- 样本矩阵,每行为一个样本
    %      k --- 降维至 k 维
    %
    % 输出:pcaA --- 降维后的 k 维样本特征向量组成的矩阵,每行一个样本,列数 k 为降维后的样本特征维数
    %      V --- 主成分向量
    
    [r c] = size(A);
    
    % 样本均值
    meanVec = mean(A);
    
    % 计算协方差矩阵的转置 covMatT
    Z = (A-repmat(meanVec, r, 1));
    covMatT = Z * Z';
    
    % 计算 covMatT 的前 k 个本征值和本征向量
    [V D] = eigs(covMatT, k);
    
    % 得到协方差矩阵 (covMatT)' 的本征向量
    V = Z' * V;
    
    % 本征向量归一化为单位本征向量
    for i=1:k
        V(:,i)=V(:,i)/norm(V(:,i));
    end
    
    % 线性变换(投影)降维至 k 维
    pcaA = Z * V;
    
    % 保存变换矩阵 V 和变换原点 meanVec
    save('Mat/PCA.mat', 'V', 'meanVec');


    在得到包含R的特征向量的矩阵V之后,为计算散布矩阵S的本征向量,只需计算Z*V。此外,还应注意PCA中需要的是具有单位长度的本征向量, 故最后要除以该向量的模从而将正交本征向量归一化为单位正交本征向量。

    局部二进制模式

    局部二进制模式(local binary patterns, LBP)最早是作为一种有效的纹理描述算子提出的,由于其对图像局部纹理特征的卓越描绘能力而获得了广泛的应用。LBP特征具有很强的
    分类能力(highly discriminative)、较高的计算效率, 并且对于单调的灰度变化具有不变性。

    基本LBP


    LBP的主要思想是以某一点与其邻域像素的相对灰度作为响应, 正是这种相对机制使 LBP算子对于单调的灰度变化具有不变性。 人脸图像常常会受到光照因素的影响而产生灰度变化,但在一个局部区域内,这种变化常常可以被视为是单调的,因此LBP在光照不均的人 脸识别应用中也取得了很好的效果.

    圆形邻域的LBPP,R算子

    基本LBP算子可以被进一步推广为使用不同大小和形状的邻域。采用圆形的邻域并结合双线性插值运算使我们能够获得任意半径和任意数目的邻域像素点。图10.18给出了一个半径为2的8邻域像素的圆形邻域, 图中每个方格对应一个像素,对于正好处于方格中心的邻
    域点(左、上、右、下四个黑点),直接以该点所在方格的像素值作为它的值;对于不在像素中心位置的邻域点(斜45度方向的4个黑点), 通过双线性插值确定其值。

    统一化LBP算子一一UnifomLBP

    由于LBP直方图大多都是针对图像中的各个分区分别计算的(详见10.5.5),对于一个普通大小的分块区域,标准LBP算子得到的二进模式数目(LBP直方图收集箱数目)较多,而实际位于该分块区域中的像素数目却相对较少, 这将会得到一个过于稀疏的直方图。从而
    使直方图失去统计意义。 因此应设法减少一些冗余的LBP模式, 同时又保留足够的具有重要描绘能力的模式。

    MB-LBP


    图像分区

    曾提到, 作为图像的一阶统计特征,直方图无法描述图像的结构信息。而图像各个区域的局部特征往往差异较大,如果仅对整个团像的生成一个LBP直方图,这些局部的差异信息就会丢失。分区LBP特征可有效解决这一问题。
    具体的方法是将一幅图像适当地划分为PXQ个分区(partition),然后分别计算每个图像分区的直方图特征,最后再将所有块的直方图特征连接成一个复合的特征向量(composite
    feature)作为代表整个图像的LBP直方图特征。

    分区大小的选择
    理论上, 越小越精细的分区意味着更好的局部描述能力,但同时会产生更高维数的复合特征。然而过小的分区会造成宜方图过于稀疏从而失去统计意义。人脸识别的应用中选择了18X21的分区大小,这可以作为对于一般问题的指导性标准,因为它是一个精确描述能力与特征复杂度的良好折中。在表情识别中更小一些(如1OX15)的分区被我们证明能够获得更好的分类能力。这里分区大小的单位是.MB-LBP的像素块(block)。如对于传统LBP, 每个
    分区大小取18像素X21像素, 则对于应MB-LBP分区大小应取18像素块X21像素块= 54像素X63像素口


    展开全文
  • 图像复原

    2018-08-09 16:16:47
    1图像复原的而理论模型 定义:在成像过程中,由于成像系统各种因素的影响,可能使获得的图像不是真实景物的完善影像。图像在形成、传播和保存过程中使图像质量下降的过程,称为图像退化。图像复原就是重建退化的...

    1图像复原的而理论模型

    定义:在成像过程中,由于成像系统各种因素的影响,可能使获得的图像不是真实景物的完善影像。图像在形成、传播和保存过程中使图像质量下降的过程,称为图像退化。图像复原就是重建退化的图像,使其最大限度恢复景物原貌的处理。图像复原只能尽量使图像接近其原始图像,但由于噪声干扰等因素,很难精确还原。

    图像增强与图像复原的区别:图像增强的目的是消除噪声,显现那些被模糊了的细节或简单地突出一幅图像中读者感兴趣的特征,,不考虑图像质量下降的原因。图像复原是利用退化现象的某种先验知识,建立退化现象的数学模型,再根据模型进行反向的推演运算,以恢复原来的景物图像。因而,图像复原可以理解为图像降质过程的反向过程。建立图像复原的反向过程的数学模型,就是图像复原的主要任务。经过反向过程的数学模型的运算,要想恢复全真的景物图像比较困难。所以, 图像复原本身往往需要有一个质量标准, 即衡量接近全真景物图像的程度,或者说,对原图像的估计是否到达最佳的程度。

     

    2噪声模型:噪声主要来源于图像的获取和传输过程。

    (1)图像传感器的工作情况受各种因素的影响,如图像获取中的环境条件和传感器元器件自身的质量。

    (2)图像在传输过程中主要由于所用传输信道被干扰而受到噪声污染。

    噪声种类:高斯噪声、瑞利噪声、伽马噪声、指数噪声、均匀分布噪声、脉冲噪声(椒盐噪声)

    在matlab命令窗口输入命令绘制概率密度图:

    >> x=-4:.1:4;
    >> subplot(321)
    >> Y1=show_noise_pdf('gaussian',x,0,1);
    >> plot(x,Y1);
    >> title('高斯');
    >> subplot(322)
    >> Y2=show_noise_pdf('uniform',x,-3,3);
    >> plot(x,Y2);
    >> title('均匀');
    >> subplot(323)
    >> Y3=show_noise_pdf('salt & pepper',x);
    >> plot(x,Y3);
    >> title('椒盐');
    >> subplot(324)
    >> Y4=show_noise_pdf('rayleigh',x,1);
    >> plot(x,Y4);
    >> title('瑞利');
    >> subplot(325)
    >> Y5=show_noise_pdf('exp',x,1);
    >> plot(x,Y5);
    >> title('指数');
    >> subplot(326)
    >> Y6=show_noise_pdf('gamma',x,2,5);
    >> plot(x,Y6);
    >> title('伽马');

    在matlab命令窗口中调用add_noise函数为图像添加噪声,并调用matlab自带函数hist绘制灰度直方图

    >>I=imread('square.bmp');
    >> J1=add_noise(I,'gaussian',0,10);
    >> subplot(321)
    >> hist(double(J1(:)),100)
    >> title('高斯');
    >> subplot(321)
    >> J2=add_noise(I,'uniform',-20,20);
    >> hist(double(J2(:)),100)
    >> title('均匀');
    >> subplot(323)
    >> J3=add_noise(I,'salt & pepper',0.02);

    >> hist(double(J3(:)),100)
    >> title('椒盐');
    >> subplot(324)
    >> J4=add_noise(I,'rayleigh',30);
    >> hist(double(J4(:)),100)
    >> title('瑞利');
    >> subplot(325)
    >> J5=add_noise(I,'exp',15);
    >> hist(double(J5(:)),100)
    >> title('指数');
    >> subplot(326)
    >> J6=add_noise(I,'gamma',2,10);
    >> hist(double(J6(:)),100)
    >> title('伽马');

     

    3空间滤波

    空间滤波器种类:均值滤波器(适于高斯噪声)、统计排序滤波器(适于椒盐噪声)、自适应局部噪声消除滤波器(适于所有噪声)、自适应中值滤波器(适于椒盐噪声)。

    在图像中加入0.05的高斯噪声,用中值滤波和自适应滤波进行复原:

    >> I=imread('lena.bmp');
    >> I0=imnoise(I,'salt & pepper',0.01);
    >> I1=medfilt2(I0,[3,3]);
    >> I2=adp_median(I0,7);
    >> subplot(221);
    >> imshow(I);
    >> title('原图');
    >> subplot(222);
    >> imshow(I0);
    >> title('椒盐噪声')
    >> subplot(223);
    >> imshow(I1);
    >> title('中值滤波')
    >> subplot(224);
    >> imshow(I2);
    >> title('自适应滤波');

     

    4逆滤波复原

    (1)退化

    %读取原始图像
    I=imread('lena.bmp');
    figure(1);
    subplot(121)
    imshow(I)
    title('原始图像');
    f=im2double(I);

    %傅里叶变换
    F=fft2(f);
    F=fftshift(F);

    %执行退化
    [M,N]=size(F);
    [u,v]=meshgrid(1:M,1:N);
    H=exp(-0.0025*((u-M/2).^2+(v-N/2).^2).^(5/6));
    F=F.*H;

    %傅里叶变换
    X=ifftshift(F);
    x=ifft2(X);
    subplot(122)
    x=uint8(abs(x)*256);
    imshow(x)
    imwrite(x,'lena_t.bmp');
    title('退化图像');

    (2)复原

    %逆滤波
    I0=imread('lena_t.bmp');

    %阈值为128
    I_new1=rev_filter(I0,H,128);

    %阈值为108
    I_new2=rev_filter(I0,H,108);

    %阈值为78
    I_new3=rev_filter(I0,H,78);

    %阈值为48
    I_new4=rev_filter(I0,H,48);
    si=zeros(M,N,1,4,'uint8');
    si(:,:,1)=I_new1;
    si(:,:,2)=I_new2;
    si(:,:,3)=I_new3;
    si(:,:,4)=I_new4;

    %绘图
    figure
    montage(si)
    title('阈值分别为128,108,78,48')

     

    5维纳滤波复原

    定义:维纳滤波只能解决退化函数,没有加性噪声的问题,维纳滤波又称最小均方误差滤波,综合考虑了退化函数和噪声。

    对256*256的lena灰度图像进行退化处理,再添加高斯噪声,对得到的退化图像进行复原步骤如下:

    (1)用imnoise()函数添加均值为0,方差为0.001的高斯噪声

    (2)将逆滤波和维纳滤波复原效果进行对比。

    %维纳滤波与逆滤波
    clear;
    clc;

    %%
    I=imread('lena.bmp');

    %傅里叶变换
    [m,n]=size(I);
    FI=fft2(I);
    FI=fftshift(FI);

    %退化
    k=0.0025;
    u=1:m;
    v=1:n;
    [u,v]=meshgrid(u,v);
    H=exp((-k).*(((u-m/2).^2+(v-n/2).^2).^(5/6)));
    G=FI.*H;

    %添加噪声
    I0=real(ifft2(fftshift(G)));
    I1=imnoise(uint8(I0),'gaussian',0,0.001);
    figure(1)
    imshow(I1);
    imwrite(I1,'lena_wn.bmp')

    %%
    I1=imread('lena_wn.bmp');

    %%逆滤波
    I_new=rev_filter(I1,H,48);
    figure(2);
    imshow(I_new)
    title('逆滤波结果');

    %维纳滤波
    K=0.05;
    I_new1=wn_filter(I1,H,48,K);
    figure(3);
    imshow(I_new1);
    title('维纳滤波结果');

    从图中可以看出,取同样的半径时,维纳滤波所得图像比逆滤波消除噪声的效果更高

     

    6有约束最小二乘复原

     

    %约束最小二乘复原
    %%
    clear,clc
    close all

    %%产生退化图像
    I=checkerboard(8);

    %运动模糊的点扩散函数
    PSF=fspecial('motion',7,45);

    fprintf('点扩散函数:\n');
    disp(PSF)

    %对图像进行运动模糊滤波
    Im1=imfilter(I,PSF,'circular');

    %添加高斯噪声
    noise=imnoise(zeros(size(I)),'gaussian',0,0.001);
    Im=Im1+noise;
    %%维纳滤波
    Iw=deconvwnr(Im,PSF,0.02);

    %约束最小二乘滤波
    I=edgetaper(I,PSF);
    Iz=deconvreg(Im,PSF,0.2,[1e-7,1e7]);

    %%绘图
    subplot(221);
    imshow(I,[])
    title('原始图像');

    subplot(222);
    imshow(Im,[])
    title('退化图像');

    subplot(223)
    imshow(Iw,[])
    title('维纳滤波');

    subplot(224)
    imshow(Iz,[])
    title('最小二乘滤波');

     

    7Lucky-Richardson复原

     

    %run lucy
    %L-R算法图像复原

    %%
    clear,clc
    close all

    %%
    %棋盘格图像
    I=checkerboard(8);

    %点扩散函数
    PSF=fspecial('gaussian',7,10);

    %方差为0.0001
    SD=0.01;
    In=imnoise(imfilter(I,PSF),'gaussian',0,SD^2);

    %%
    %使用Lucy-Richardson算法对图像复原
    Dampar=10*SD;
    LIM=ceil(size(PSF,1)/2);
    Weight=zeros(size(In));

    %权值weight数组的大小是64*64
    %并且有值为0的4像素宽的边界,其余像素都是1
    Weight(LIM+1:end-LIM,LIM+1:end-LIM)=1;

    %迭代次数为5
    NumIt=5;
    %利用deconvlucy来复原
    J1=deconvlucy(In,PSF,NumIt,Dampar,Weight);

    %迭代次数为10
    NumIt=10;
    J2=deconvlucy(In,PSF,NumIt,Dampar,Weight);

    %迭代次数为20
    NumIt=20;
    J3=deconvlucy(In,PSF,NumIt,Dampar,Weight);

    %迭代次数为100
    NumIt=100;
    J4=deconvlucy(In,PSF,NumIt,Dampar,Weight);

    %%绘图
    subplot(231);
    imshow(I);
    title('原图');

    subplot(232);
    imshow(In);
    title('退化图像');

    subplot(233);
    imshow(J1);
    title('迭代5次');

    subplot(234);
    imshow(J2);
    title('迭代10次');

    subplot(235);
    imshow(J3);
    title('迭代20次');

    subplot(236);
    imshow(J4);
    title('迭代100次');

     

    8盲去卷积图像复原

    %run_blind
    %盲去卷积复原
    %%
    clear,clc
    close all

    %产生棋盘格图像并进行退化
    I=checkerboard(8);
    PSF=fspecial('gaussian',7,10);
    V=.0001;

    %退化
    BlurredNoisy=imnoise(imfilter(I,PSF),'gaussian',0,V);

    %%复原
    %权值
    Weight=zeros(size(I));
    Weight(5:end-4,5:end-4)=1;

    %点扩散函数的估计值
    InitPSF=ones(size(PSF));
    [J, P]=deconvblind(BlurredNoisy,InitPSF,20,10*sqrt(V),Weight);
    subplot(221);
    imshow(BlurredNoisy);
    title('退化图像');
    subplot(222);
    imshow(PSF,[]);
    title('点扩展图像');
    subplot(223);
    imshow(J);
    title('盲去卷积复原结果');
    subplot(224);
    imshow(P,[]);
    title('输出的估计点扩展函数');

     

    9MATLAB图像复原综合案例-去除照片的运动模糊

    %de_motion.m
    clear,clc
    close all

    %%读入图片
    I=imread('bicycle.bmp');
    if ndims(I)>=3
        I=rgb2gray(I);
    end
    figure(1);
    imshow(I,[])
    title('运动模糊图像');

    %%去除运动模糊

    %水平方向上运动20像素
    PSF=fspecial('motion',20,0);

    figure(2);
    %估计噪声方差
    noise_var=0.0001;
    estimated_nsr=noise_var/var(double(I(:)));

    %维纳滤波
    I2=deconvwnr(I,PSF,0.00005);
    imshow(I2,[]);
    title('维纳滤波复原');

    展开全文
  • 图像复原原理及实现

    2017-09-02 14:04:19
    图像复原原理及实现

    补充知识

    相关函数

    • 信号X是随时间变化的随机变量序列,不同时间起始点的序列X(s)X(t)的相关函数可以表示为

    R(s,t)=E[(Xtμt)(Xsμs)]σtσs

    * 对于二阶稳态过程,即信号的均值和方差不随时间的变化而变化,则此时相关函数只是时间差τ=st的函数,可以简化为

    R(τ)=E[(Xtμ)(Xsμ)]σ2

    这即是统计学函数里面的自相关函数
    * 将相关函数离散化,可以得到

    R(τ)=1Ni=0N1XiμσXi+τμσ

    即两个向量的内积,它可以反映同一序列在不同时刻取值之间的相似程度。

    标准互相关函数

    • Normalized Cross-Correlation, NCC
    • 两幅图像f(x,y), t(x,y),均值和方差分别为(uf,σ2f),(ut,σ2t),则NCC为

    NCC=1N1x,yf(x,y)μfσft(x,y)μtσt

    对图像减去均值并除以标准差,可以保证图片的亮度和对比度不变性,即NCC具有在亮度和对比度下的稳定性。

    功率谱密度

    • power spectrum density, PSD
    • 功率谱密度是信号在某个频率下拥有的能量,一个信号的功率谱密度就是该信号自相关函数的傅立叶变换,将一个信号的psd对所有频率进行积分,得到的值即为信号的总能量。功率谱密度计算方法为

    PXX(s)=F(s)F(s)=|F(s)|2

    其中F(s)F(s)f(t)的傅立叶变换和F(s)的复共轭。

    • 每个信号的功率谱密度唯一,是信号的一种属性,在图像处理中,可以将图像看作信号,对图像的ROI进行标准化之后,再进行傅立叶变化,就可以得到图像的功率谱,在进行模板匹配等操作时,就有了一个可以匹配的模板属性,可以作为ROI的一个特征。
    • FFT可以为计算psd提供一个高效的计算手段

    白噪声

    • 白噪声是一种功率谱密度为常数的随机信号或者随机过程,信号在各个频率上的能量相同,因此白噪声不具有周期性

    参考内容

    主要图像复原方法简介

    图像复原处理的过程

    • 设原始图像f(x,y),则退化后的图像可以表示为

    g(x,y)=H[f(x,y)]+η(x,y)

    其中H为退化函数,η(x,y)为加性噪声,复原的目标是得到基于退化图像的一个估计f^(x,y),使得图像能够尽可能地贴近原始图像。
    * 若H是线性的、空间不变的过程,则退化图像在空间频域中可以表示为

    g(x,y)=h(x,y)f(x,y)+η(x,y)

    进行傅立叶变换,有
    G(u,v)=H(u,v)F(u,v)+N(u,v)

    * 噪声模型有很多种,包括高斯噪声、椒盐噪声、泊松噪声等

    直接逆滤波处理

    • 用于复原一幅退化图像的最简方法是构成以下形式的估计

    F^(u,v)=G(u,v)H(u,v)

    然后进行逆傅立叶变换得到原图的估计。

    可以将上面的公式写为

    F^(u,v)=F(u,v)+N(u,v)H(u,v)

    则即使知道了准确的H(u,v),也无法恢复F(u,v),因为还需要知道噪声信号。而且很多H(u,v)为0的情况也是一个很大的问题。可以将H(u,v)=0的点特殊处理一下,此时这种方法被称为伪逆滤波
    * 很少有使用价值

    维纳滤波

    • 维纳滤波是一种线性图像复原方法,寻找一个使统计误差函数

    e2=E{(ff^)2}
    最小的估计f^,在频域可以表示为

    F^(u,v)=[1H(u,v)|H(u,v)|2|H(u,v)|2+Sη(u,v)/Sf(u,v)]G(u,v)

    其中
    H(u,v)为退化函数,SηSf是噪声与未退化图像的功率谱。信噪比为

    SNR=Sf(u,v)Sη(u,v)

    信噪比为无穷大时,表明没有噪声,则维纳滤波退化为逆滤波。

    约束的最小二乘方(正则)滤波

    • 约束最小二乘滤波的核心是H对噪声敏感的问题。处理这个问题的一种方法是基于平滑度测量的最优性。复原过程中,需要寻找准则函数C的最小值。函数C定义为

    C=x=0M1y=0N1[2f(x,y)]2

    函数的约束条件为

    gHf^=η2

    这个最优化问题的频域解决办法由下式给出

    F^(u,v)=[H(u,v)|H(u,v)|2+γ|P(u,v)|2]G(u,v)

    其中P(u,v)是拉普拉斯算子p(x,y)的傅立叶变换,有

    P=010141010

    未知量有γη2两个。若已知和噪声功率(标量)成比例的η2,则通过迭代,γ可以得出。

    LR滤波

    • 是一种非线性滤波方法,也是找到模型的极大似然函数

    代码及实现部分

    • 主要参考的是冈萨雷斯的数字图像处理matlab版

    代码

    %%
    clc,clear,close all
    % 原始图像
    f = checkerboard(8);
    % 噪声滤波器
    PSF = fspecial('motion', 7, 45);
    % 退化图像
    gb = imfilter( f, PSF, 'circular' );
    % 高斯滤波
    noise = imnoise( zeros(size(f)), 'gaussian', 0, 0.001 );
    % 将噪声加到原图上
    g = gb + noise;
    
    figure
    subplot(221), imshow( f ), title('原图')
    subplot(222), imshow( noise, [] ), title('高斯噪声')
    subplot(223), imshow( gb ), title('退化图像')
    subplot(224), imshow( g ), title('退化图像加高斯噪声')
    
    %% 图像复原
    % 噪信比默认为0,即信噪比相当于无穷大,即直接逆滤波的过程
    fr1 = deconvwnr( g, PSF );
    
    Sn = abs( fft2(noise) ) .^2;
    nA = sum( Sn(:) ) / numel( noise );
    Sf = abs( fft2(f) ) .^2;
    fA = sum( Sf(:) ) / numel( f );
    R = nA / fA;  % 平均噪信比计算
    % 使用常数比例的维纳滤波进行复原
    fr2 = deconvwnr( g, PSF, R );
    % 使用自相关函数的维纳滤波进行复原
    Ncorr = fftshift( real(ifft2(Sn)) );
    Fcorr = fftshift( real(ifft2(Sf)) );
    fr3 = deconvwnr( g, PSF, Ncorr, Fcorr );
    
    figure
    subplot(221), imshow( g ), title('模糊的运动图像')
    subplot(222), imshow( fr1, [] ), title('直接逆滤波复原图像')
    subplot(223), imshow( fr2, [] ), title('常数比例维纳滤波复原图像')
    subplot(224), imshow( fr3, [] ), title('使用自相关函数的维纳滤波复原图像')
    
    %% 约束最小二乘滤波
    % 4 约等于  64*64*0.001
    fr1 = deconvreg( g, PSF, 4 );
    
    fr2 = deconvreg( g, PSF, 0.4, [1e-7, 1e7] );
    
    figure
    subplot(221), imshow( g ), title('模糊的运动图像')
    subplot(222), imshow( fr1, [] ), title('仅噪声功率参数的正则滤波')
    subplot(223), imshow( fr2, [] ), title('包含噪声和gamma范围的正则滤波')
    
    %% Lucy-Richardson算法的迭代非线性复原
    g = checkerboard(8);
    ori = g;
    PSF = fspecial( 'gaussian', 7, 10 );
    SD = 0.01;
    g = imnoise( imfilter(g, PSF), 'gaussian', 0, SD^2 );
    
    damper = 10*SD;
    lim = ceil( size(PSF, 1) / 2 );
    weight = zeros( size(g) );
    weight( lim+1:end-lim, lim+1:end-lim ) = 1;
    numit = 5;
    f5 = deconvlucy( g, PSF, numit, damper, weight );
    numit = 20;
    f20 = deconvlucy( g, PSF, numit, damper, weight );
    numit = 50;
    f50 = deconvlucy( g, PSF, numit, damper, weight );
    numit = 100;
    f100 = deconvlucy( g, PSF, numit, damper, weight );
    
    
    figure
    subplot(231), imshow( ori ), title('原始图像')
    subplot(232), imshow( g, [] ), title('加两次高斯噪声的图')
    subplot(233), imshow( f5, [] ), title('LR 5次迭代')
    subplot(234), imshow( f20 ), title('LR 20次迭代')
    subplot(235), imshow( f50, [] ), title('LR 50次迭代')
    subplot(236), imshow( f100,[] ), title('LR 100次迭代')
    

    结果

    • 原图+噪声

      这里写图片描述

    • 逆滤波和维纳滤波

      这里写图片描述

    • 正则滤波

      这里写图片描述

    • LR滤波

      这里写图片描述

    任意模糊运动图像的复原

    运动参数估计

    • 主要包括运动的角度和长度,运动的角度可以用Radon方法进行估计,运动的长度可以用倒谱法进行估计
    • 参考链接:http://www.cnblogs.com/yomman/p/3424494.html

    • 代码

      function [beta, len] = getMotionPara( img, showImg )
      % getMotionPara : 得到运动模糊图像的的参数估计
      %   img   : 输入的灰度图像
      %   beta  : 运动参数的角度
      %   len   : 运动参数的长度
      % 用这两个参数可以对图像进行复原
          if nargin <= 1
              showImg = false;
          end
          fg = fft2( img );
          spec = log(1+abs(fg));
          specCenter = fftshift( spec );
          thres = graythresh( specCenter );
          bw = edge( specCenter, 'canny', thres );
          th = 1:180;
          R = radon( bw, th );
          maxRadon = max(R(:));
          [~, n] = find( R == maxRadon );
          [M, N] = size( specCenter );
          beta = atan( tan(n*pi/180)*M/N)*180/pi;
      
          %利用倒谱的方法估计模糊尺度
          theta = beta;
          %――――――――――――――――――――――――――――
          %转化为倒谱域:Cep(g(x,y)) = invFT{log(FT(g(x,y)))}
          fin = fft2(img); %转化为频域
      
          lgfin = abs(log(1 + abs(fin))); %转化为对数,abs是求复数的模
          cin = ifft2(lgfin); %得到倒谱域的图像
          cinrot = imrotate(cin, -theta); %旋转图像,使模糊方向水平
      
          %计算每列的平均值
          for i=1:size(cinrot, 2)   %列数
              avg(i) = 0;
              for j=1:size(cinrot, 1)  %行数
                  avg(i) = avg(i) + cinrot(j, i);
              end
              avg(i) = avg(i)/size(cinrot, 1); %第i列的平均值
          end
          avgr = real(avg);
      
          %用第一个负值计算模糊尺度
          index = 0;
          for i = 1:round(size(avg,2)),
              if real(avg(i))<0,
                  index = i;
                  break;
              end
          end
      
          %如果找到了模糊尺度,则:
          if index~=0
              len = index;
          else
      
          %如果没有找到模糊尺度(无负峰),则利用查找最低峰的方法再查找
              index = 1;
              startval = avg(index);
              for i = 1 : round(size(avg, 2)/2),
                  if startval>avg(i),
                      startval = avg(i);
                      index = i;
                  end
              end
              len = index;
          end
      
          if showImg
              subplot(221), imshow( img ), title('原图')
              subplot(222), imshow( specCenter, [] ), title('居中后的压缩频谱')
              subplot(223), imshow( bw ), title('频谱二值化图像')
              subplot(224), imshow( R ), title('Radon变换后图像')
          end
      
      end

    滤波效果对比

    • 一些信噪比等的参数主要是通过尝试得出

    • 代码(main.m)

      %% 
      clc,clear,close all
      img = imread( '1.jpg' );
      gb = double(rgb2gray( img )) / 255;
      %% 运动参数估计
      [beta, len] = getMotionPara( gb );
      fprintf('PSF parameters, angle : %.2f, length : %.2f\n', beta, len);
      %% 图像噪声去除
      % 运动噪声滤波器估计
      PSF = fspecial('motion', len, beta);
      % 直接逆滤波求得结果
      % 逆滤波得到的结果很差,说明原图中有较多噪声,需要通过其他方法去除
      res1 = deconvwnr( gb, PSF );
      % 维纳滤波
      % 随便给的一个信噪比的值
      nsr = 0.01;
      res2 = deconvwnr( gb, PSF, nsr );
      % 约束最小二乘滤波
      % 尝试给出的一个噪声能量值
      noisePower = 10;
      res3 = deconvreg( gb, PSF, noisePower );
      
      figure
      subplot(231), imshow( img ), title('原图')
      subplot(232), imshow( res1, [] ), title('逆滤波复原后图像')
      subplot(233), imshow( res2, [] ), title('维纳后图像')
      subplot(234), imshow( res3, [] ), title('约束最小二乘复原后图像')
    • 效果图

      这里写图片描述

      这里写图片描述

    • 注:其实图像复原最重要的还是参数估计和噪声估计,不然复原效果会一直很差

    展开全文
  • 图像的通道和深度

    2019-05-18 18:07:53
    二值图像图像的像素点不是0 就是1 (图像不是黑色就是白色),图像像素点占的位数就是 1 位,图像的深度就是1,也称作位图。 灰度图像图像的像素点位于0-255之间,(0:全黑,255代表:全白,在0-255之间插入了...

    图像的深度
    图像中像素点占得bit位数,就是图像的深度,比如:
    二值图像:图像的像素点不是0 就是1 (图像不是黑色就是白色),图像像素点占的位数就是 1 位,图像的深度就是1,也称作位图。
    灰度图像:图像的像素点位于0-255之间,(0:全黑,255代表:全白,在0-255之间插入了255个等级的灰度)。2^8=255,图像的深度是8。
    依次轮推,我们把计算机中存储单个像素点所用的 bit 位称为图像的深度。


    图像的通道
    有了图像深度的概念,我们知道如果是24位的图像,则这个像素点的颜色的取值范围是:从0到2^24。这个范围特别大,如果我们知道了某店的像素值怎么判断像素点的颜色呢?
    我们知道 RGB是基本的三原色,如果我们用8位代表一种颜色,每种颜色最大是255,这样每个像素点的颜色值的范围就是(0-255,0-255,0-255)。这样图像的通道就是3。


    灰度图的图像存储模型


    灰度图像像素点的存储就是对应的原图从左到右,从上到下,依次排列,每个点的值就是就是像素点的值,每个点的地址就是像素像素点的地址。

     

    RGB图的图像存储模型

    RGB彩色图像和灰度图相比,每个像素点都有3个通道。每个通道占的内存空间都是8位。在内存中,RGB 图像的存储是以二维数组的形式。
    学习图像的存储就是为了理解图像中像素点的存储情况,有助于我们对每个像素点的操作。
    --------------------- 
    原文:https://blog.csdn.net/u013355826/article/details/64905921 

    展开全文
  • 一、图像复原与图像增强的区别图像的增强是一个主观的过程,其目的是改善图片的质量,对感兴趣的部分加以增强,对不感兴趣的部分予以抑制。而图像复原是一个客观的过程,针对质量降低或失真的图像,试图恢复其原始的...
  • 图像增强—图像锐化

    2020-04-02 11:49:48
    图像锐化与图像平滑是相反的操作,锐化是通过增强高频分量来减少图像中的模糊,增强图像细节边缘和轮廓,增强灰度反差,便于后期对目标的识别和处理。锐化处理在增强图像边缘的同时也增加了图像的噪声。方法通常有...
  • 什么是数字图像处理?历史、以及它所研究的内容。 说起图像处理,你会想到什么?你是否真的了解这个领域所研究的内容。纵向来说,数字图像处理研究的历史相当悠久;横向来说,数字图像处理研究的话题相当广泛。 ...
  • 规划: 整体内容是四块: 首先是训练和评估数据,我们选择的是微软COCO图片数据数据,后面简单会介绍数据的格式,处理方式 整体topic的主线是沿着show and tell的发展 介绍各种attention以及其他encoder机制的...
  • 图像直方图

    2019-05-02 20:47:00
    图像直方图概述 1.图像直方图概述   直方图广泛运用于很多计算机视觉运用当中,通过标记帧与帧之间显著的边缘和颜色的统计变化,来检测视频中场景的变化。在每个兴趣点设置一个有相近特征的直方图所构成 “标签”...
  • 图像梯度

    2018-11-14 16:04:00
    复习图像梯度,发现有很多需要进一步理解的内容,重新整理一篇 目录 方向导数和梯度 python实现 图像梯度的使用 方向导数和梯度 参考: 第七节 方向导数与梯度 偏导数 数字图像的梯度概念(the gradient of the ...
  • 首先,我们平时所用的彩色图像是RGB色,分别有三个图像通道: red(0-255),green(0-255),blue(0-255) 1. 可以把一张图像理解为一个二维矩阵,在矩阵中每一个点都有一个属性,就是它的RGB色,以此来构成一个图像 ...
  • 目录 ...初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
  • 写在前头:说到数字图像处理,不得不提起MATLAB。这是一款非常方便的仿真软件,绝大多数的图像处理可以用MATLAB完成。  有人问,处理图片,用PS岂不是更好。两者各有优点,如果需要将10000幅图片转换成灰度...
  • 目标检测的图像特征提取之(一)HOG特征 zouxy09@qq.com 1、HOG特征:  方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和...
  • 图像处理之常见二值化方法汇总 图像二值化是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多。越 精准的方法计算量也越大。本文主要介绍四种常见的二值处理方法,通常情况下可以满 足大多数图像处理...
1 2 3 4 5 ... 20
收藏数 1,149,259
精华内容 459,703
关键字:

图像