精华内容
下载资源
问答
  • 由清华大学出版社出版的《图像处理中数学修炼》这本书是今年3月左右正式上市销售的。现在三个多月过去了,已经积累了大量的读者。但是,随着读者数量的增加,近来有部分读者在跟我交流和咨询的时候表现出来许多在...

    由清华大学出版社出版的《图像处理中的数学修炼》这本书是今年3月左右正式上市销售的。现在三个多月过去了,已经积累了大量的读者。但是,随着读者数量的增加,近来有部分读者在跟我交流和咨询的时候表现出来许多在读书和用书时的困惑,这里我特别把这本书的一些情况和大家可能有的误解在做一个澄清,希望大家对这本书的结构、作用、意义和阅读的方法有一个了解,从而真正发挥它的作用。同时也避免潜在读者由于错误地使用本书而使得自己事倍功半、收效不及预期的情况发生。

    如果你是这本书的读者或者准备购买本书的潜在读者,请你务必了解下面这些内容

    这本《图像处理中的数学修炼》全书一共八章,可分为两个部分,前四章全部是数学原理,并不涉及任何具体的图像处理算法,后四章是数学在图像里的应用。

    你可能会讶异,如果前四章都是不涉及图像处理的纯数学知识,那我何不直接买一本数学书?这里特别需要说明,前四章的意义在于:图像处理往深了研究,需要用到大量的数学知识,但是你不可能把数学专业的教材全借来从头到尾学一遍,那样你精力也不够用。

    本书前四章,是从各种数学领域挑出来跟图像研究最直接相关,也就是你最需要,最可能会用到的数学知识,所以这部分的意思在于给你限定了一个范围,就像考试之前画重点一样。如果这些数学知识你都掌握了,那么图像处理算法中涉及的所有公式你就都能看懂了。

    当然只有理论你肯定会觉得空洞。所以为了锻炼你应用前4章数学知识的能力我特别安排了后4章。后四章里会大量用到前4章里的数学概念,例如梯度,散度,黑塞矩阵,高斯迭代法,欧拉-拉格朗日公式等等,但是后面不会再解释这些数学概念,因为前4章里面已经讲过了。后4章的作用就在于让你巩固一下前面所学,然后自己实际感受一下这些数学的用武之地。

    但是我不可能把一整本图像处理书所有的东西都拿来做例子,因为毕竟篇幅有限。所以后四章就相当于攫选了图像处理中的四个大的Topics来讲解,当然细分的话可能包括很多具体的算法(例如直方图均衡、暗通道去雾、基于频域变换的图像压缩等等)。所以后4章并不能覆盖所有图像的话题,也不需要覆盖,例如可能图像处理中用到黑塞矩阵的地方有超过十个算法,作为例子我讲一两个也就足够了。后4章只是帮你巩固和体会前面数学知识在图像处理中的应用。所以你不能通过阅读《数学修炼》这本书来掌握图像处理的所有话题,也不能用它来作为图像处理的入门。但是你可以把这本书作为你学习图像处理中所需要的数学基础的一个指导。此外,我觉得在日后的研究中把它作为一本字典来用也是很不错的选择。

    ------------------------------以下是勘误表部分-----------------------------------

    《图像处理中的数学修炼》一书已由清华大学出版社出版发行。勘误表请见如下(不断更新中):

    关于本书的更多详情及目录可以参见 http://blog.csdn.NET/baimafujinji/article/details/48467225 。

    * 表示第二次增印中已经改正。

    ** 表示第三次增印中已经改正。

    *** 表示第四次增印中已经改正。

    * 1、前言部分,第1页,最后1段第1行:总所周知,... ...

    应该改为:众所周知

    ** 2、第1章,第12页:“通过计算可知”下面的公式中无端多出了一个4,应该改为:

    * 3、第1章,第18页:在第2章中,本书还会讨论勒贝格... ...

    应该改为:在第3章中,本书还会讨论勒贝格... ...

    * 4、第1章,第21页:“由此得函数的增量”后面公式的积分下限有误,应该改为:

    * 5、第1章,第22页:内积的性质:ab 是两个向量,... ...

    应该改为:abc 是三个向量

    * 6、第1章,第24页:(· b× c = · (b + c)

    应该改为:(· b× c = · (b × c)

    * 7、第1章,第24页:(× b× c + × (c × a) + × (a × b) = 0,第一个括号加错位置了,应该改为:

    * 8、第1章,第25页:这里 grad f(x,y), 表示向量 grad f(x,y) 与 的夹角,应该改为:

    特别说明:一般教材上会使用尖括号<a,b>来表示向量 ab 的夹角,而本书中采用的符号是小括号。为保证全书统一,这里仍然使用小括号。

    ** 9、第1章,第33页,“所以,可得”下面的公式印刷有误,应该改为:

    * 10、第2章,第52页,“对于第二个等式,... ... ” 下面的公式中有 sim

    应该改为:sin

    ** 11、第2章,第88页,“回想第1章中介绍的黑塞矩阵... ... ”后面的公式中,通常大写粗体表示矩阵,

    其中的 X 其实是向量(而非矩阵),为保持与本书其他地方一致,应该把其中涉及到的 X 都改成 x

    * 12、第2章,第94页,“但并不需要以矩阵形式存储A”,既然是矩阵,则应该使用大写粗体,

    应该改为:A

    * 13、第3章,第110页,闵可夫斯基(Minkowski)不等式中字母 a 的上下标印刷错误,应该改为:

    * 14、第3章,第143页,一共有5个 div,

    为了保持全书统一,应该改为粗体:div

    * 15、附录,第420页:在本书的后面,也会给出... ...

    应该改为,在本书的前面,也已经给出过

    ** 16、第3章,第129页,“欧拉-拉格朗日方程(euler-Lagrange equation)... ...”

    人名应大写,所以应该改为:“欧拉-拉格朗日方程(Euler-Lagrange equation)... ...”

    ** 17、第1章,第15页,“如果二阶导数 '(x) < 0... ...”

    应该改为,“如果二阶导数 ''(x) < 0... ...”

    ** 18、第7章,7.3.3节,公式

     有误

    应该改为:

    *** 19、第4章,第200页,,P(X)=P(X|θ=0.5)+P(X|θ=0.8),根据全概率公式,应该改为:

    P(X)=P(X|θ=0.5)⋅P(θ=0.5)+P(X|θ=0.8)P(θ=0.8)

    *** 20、第6章,图6-3,最右侧,F(1) F(2) F(3) F(4) F(4) F(5) F(6) F(7),应该改为:

    F(0) F(1) F(2) F(3) F(4) F(5) F(6) F(7)

    *** 21、P252页图31的c

    表达式括号中内容有误,应为2x,即

    *** 22、P247页,

    平方误差为后面的值有误,应该改为:

    *** 23、P176,“CDF反函数(分位数函数)”

    应该改为,“CDF反函数(分位数函数)”

    *** 24、P177,第一行,“图4-8所示的关系”

    应该改为,“图4-9所示的关系”

    *** 25、P177, 图4-9中,Mq(x)是相乘的关系,所以q不应该写成下标的形式

    26、P84-85,

    改为:

    下面给出一个更为严谨的证明。假设f是一个可微的凸函数,对于任意的p_1p_2,有

    f(p_1)\geq f(p_2)+(p_1-p_2)f'(p_2)

    p_1=Xp_2=E[X],重写上式为

    然后把后续的\leq变成\geq即可。

    如果你在阅读本书过程中,发现任何问题,也欢迎反馈给我(可以在本博客留言或者发邮件给我),感谢你为本书的改进所做的贡献。

    展开全文
  • 数字图像处理技术的开发对数学基础的要求很高,一些不断涌现的新方法,眼花缭乱的数学推导令很多期望深入研究的人望而却步。一个正规理工科学生大致已经具备了包括微积分、线性代数、概率论在内的数学基础。但在...

    数字图像处理技术的研究与开发对数学基础的要求很高,一些不断涌现的新方法中,眼花缭乱的数学推导令很多期待深入研究的人望而却步。一个正规理工科学生大致已经具备了包括微积分、线性代数、概率论在内的数学基础。但在分析一些图像处理算法的原理时,好像还是感觉无从入手。实际所牵涉出来的问题主要可归结为如下几个原因:1)微积分、线性代数、概率论这些是非常重要的数学基础,但显示不是这些课程中所有的内容都在图像处理算法中有直接应用;2)当你将图像处理和数学分开来学的时候,其实并没有设法建立它们二者的联系;3)一些新方法或者所谓的高大上的算法之基础已经超过了上面三个数学课程所探讨的基本领域,这又涉及到偏微分方程、变分法、复变函数、实变函数、泛函分析等等;4)如果你不是数学科班出身,要想自学上面所谈到所有内容,工作量实在太过浩繁,恐怕精力也难以顾及。

    业余时间,笔者结合自己对图像处理的学习和实践,大致总结了一部分图像处理研究中所需的数学原理基础。这些内容主要涉及微积分、向量分析、场论、泛函分析、偏微分方程、复变函数、变分法等。线性代数和概率论笔者认为比较基础,于是并没有将其收入。我总结、归纳、提取了上面这些数学课程中,在研究图像处理最容易碰到也最需要知道的一些知识点,然后采取一种循序渐进的方式将它们重新组织到了一起。并结合具体的图像处理算法讨论来讲解这些数学知识的运用。从而建立数学知识与图像处理之间的一座桥梁。

    这部分内容主要是笔者日常研究和学习的一个总结,我原本并没有将其出版的计划(毕竟这个Topic还是有点小众而且可能还有点艰深)。但之前我撷取了其中的一小部分发到了网上,已经有读者表现出了浓厚的兴趣。再后来亦有多位出版社的编辑联系到我,希望可以将该书付梓。而且不知不觉中,这个系列专栏的内容日积月累,个人感觉确实已经形成了一个相对比较完整的体系,于是便应下了出版社的合作意向。

     原“图像处理中的数学原理”栏目中之系列文章已经以《图像处理中的数学修炼》为名结集出版(清华大学出版社)。该书详细介绍图像处理中的数学原理,为你打开一道通往图像世界的数学之门。以下是最新版本的该书的完整目录,方便各位网友查阅以及确定本书是否符合你的选购目标:

    第1章 必不可少的数学基础

    1.1  极限及其应用
        1.1.1  数列的极限
        1.1.2  级数的敛散
        1.1.3  函数的极限
        1.1.4  极限的应用
    1.2  微分中值定理
        1.2.1  罗尔中值定理
        1.2.2  拉格朗日中值定理
        1.2.3  柯西中值定理
        1.2.4  泰勒公式
        1.2.5  海塞矩阵与多元函数极值
    1.3  向量代数与场论
        1.3.1  牛顿-莱布尼茨公式
        1.3.2  内积与外积
        1.3.3  方向导数与梯度
        1.3.4  曲线积分
        1.3.5  格林公式
        1.3.6  积分与路径无关条件
        1.3.7  曲面积分
        1.3.8  高斯公式与散度
        1.3.9  斯托克斯公式与旋度
    本章参考文献


    第2章 更进一步的数学内容

    2.1  傅立叶级数展开
        2.1.1  函数项级数的概念
        2.1.2  函数项级数的性质
        2.1.3  傅立叶级数的概念
        2.1.4  傅立叶变换的由来
        2.1.5  卷积定理及其证明

    2.2  复变函数论初步
        2.2.1  解析函数
        2.2.2  复变积分
        2.2.3  基本定理
        2.2.4  级数展开

    2.3  凸函数与詹森不等式

        2.3.1  凸函数的概念
        2.3.2  詹森不等式及其证明
        2.3.3  詹森不等式的应用

    2.4  常用经典数值解法

        2.4.1  牛顿迭代法
        2.4.2  雅各比迭代
        2.4.3  高斯迭代法
        2.4.4  托马斯算法

    本章参考文献

    第3章  泛函分析以及变分法

    3.1  勒贝格积分理论
        3.1.1  点集的勒贝格测度
        3.1.2  可测函数及其性质
        3.1.3  勒贝格积分的定义
        3.1.4  积分序列极限定理
    3.2  泛函与抽象空间
        3.2.1  线性空间
        3.2.2  距离空间
        3.2.3  赋范空间
        3.2.4  巴拿赫空间
        3.2.5  内积空间
        3.2.6  希尔伯特空间
        3.2.7  索伯列夫空间
    3.3  从泛函到变分法
        3.3.1  理解泛函的概念
        3.3.2  关于的变分概念
        3.3.3  变分法的基本方程
        3.3.4  理解哈密尔顿原理
        3.3.5  等式约束下的变分
        3.3.6  巴拿赫不动点定理
        3.3.7  有界变差函数空间
    本章参考文献

    第4章 概率论与统计学基础

    4.1  概率论的基本概念
    4.2  随机变量数字特征
        4.2.1  期望
        4.2.2  方差
        4.2.3  矩与矩母函数
        4.2.4  协方差与协方差矩阵
    4.3  基本概率分布模型
        4.3.1  离散概率分布
        4.3.2  连续概率分布
    4.4  概率论中的重要定理
        4.4.1  大数定理
        4.4.2  中央极限定理
    4.5  随机采样
        4.5.1  随机采样分布
        4.5.2  蒙特卡洛采样
    4.6  参数估计
    4.7  假设检验
        4.7.1  基本概念
        4.7.2  两类错误
        4.7.3  均值检验
    4.8  极大似然估计
        4.8.1  极大似然法的基本原理
        4.8.2  求极大似然估计的方法
    4.9  贝叶斯推断
        4.9.1  先验概率与后验概率
        4.9.2  共轭分布
    参考文献


    第5章 子带编码与小波变换

    5.1  图像编码的理论基础
        5.1.1  率失真函数
        5.1.2  香农下边界
        5.1.3  无记忆高斯信源
        5.1.4  有记忆高斯信源
    5.2  子带编码基本原理
        5.2.1  数字信号处理基础
        5.2.2  多抽样率信号处理
        5.2.3  图像信息子带分解
    5.3  哈尔函数及其变换
        5.3.1  哈尔函数的定义
        5.3.2  哈尔函数的性质
        5.3.3 酉矩阵与酉变换
        5.3.4 二维离散线性变换
        5.3.5 哈尔基函数
        5.3.6 哈尔变换
    5.4  小波及其数学原理
        5.4.1  小波的历史
        5.4.2  理解小波的概念
        5.4.3  多分辨率分析
        5.4.4  小波函数的构建
        5.4.5  小波序列展开
        5.4.6  离散小波变换
        5.4.7  连续小波变换
        5.4.8  小波的容许条件与基本特征
    5.5  快速小波变换算法
        5.5.1  快速小波正变换
        5.5.2  快速小波逆变换
        5.5.3  图像的小波变换
    5.6  小波在图像处理中的应用
    本章参考文献
     

    第6章 正交变换与图像压缩

    6.1  傅立叶变换
        6.1.1  信号处理中的傅立叶变换
            1. 连续时间,连续频率——傅立叶变换
            2. 连续时间,离散频率——傅立叶级数
            3. 离散时间,连续频率——序列的傅立叶变换
            4. 离散时间,离散频率——离散的傅立叶变换
        6.1.2  数字图像的傅立叶变换
        6.1.3  快速傅立叶变换的算法
    6.2  离散余弦变换
        6.2.1  基本概念及数学描述
        6.2.2  离散余弦变换的快速算法
        6.2.3  离散余弦变换的意义与应用
    6.3  沃尔什-阿达马变换
        6.3.1  沃尔什函数
        6.3.2  离散沃尔什变换及其快速算法
        6.3.3  沃尔什变换的应用
    6.4  卡洛南-洛伊变换
        6.4.1  一些必备的基础概念
        6.4.2  主成分变换的推导
        6.4.3  主成分变换的实现
        6.4.4  基于K-L变换的图像压缩
    本章参考文献


    第7章 无所不在的高斯分布

    7.1  卷积积分与邻域处理
        7.1.1  卷积积分的概念
        7.1.2  模板与邻域处理
        7.1.3  图像的高斯平滑
    7.2  边缘检测与微分算子
        7.2.1  哈密尔顿算子
        7.2.2  拉普拉斯算子
        7.2.3  高斯-拉普拉斯算子
        7.2.4  高斯差分算子
    7.3  保持边缘的平滑处理
        7.3.1  双边滤波算法应用
        7.3.2  各向异性扩散滤波
        7.3.3  基于全变差的方法
    7.4  数学物理方程的应用
        7.4.1  泊松方程的推导
        7.4.2  图像的泊松编辑
        7.4.3  离散化数值求解
        7.4.4  基于稀疏矩阵的解法
    7.5  多尺度空间及其构建
        7.5.1  高斯滤波与多尺度空间的构建
        7.5.2  基于各向异性扩散的尺度空间
    本章参考文献
     

    第8章 处理彩色图像

    8.1  从认识色彩开始
        8.1.1  什么是颜色
        8.1.2  颜色的属性
            1. 色相
            2. 亮度
            3. 纯度
        8.1.3  光源能量分布图
    8.2  CIE色度图
        8.2.1  CIE色彩模型的建立
        8.2.2  CIE色度图的理解
            1. 确定互补颜色
            2. 确定色光主波
            3. 定义颜色区域
        8.2.3  CIE色度图的后续发展
    8.3  常用的色彩空间
        8.3.1  RGB颜色空间
        8.3.2 CMY/CMYK颜色空间
        8.3.3  HSV/HSB颜色空间
        8.3.4  HSI/HSL颜色空间
        8.3.5  Lab颜色空间
        8.3.6 YUV/YCbCr颜色空间
    8.4  色彩空间的转换方法
        8.4.1  RGB转换到HSV的方法
        8.4.2  RGB转换到HSI的方法
        8.4.3  RGB转换到YUV的方法
        8.4.4  RGB转换到YCbCr的方法
    8.5  基于直方图的色彩增强
        8.5.1     普通直方图均衡
        8.5.2    CLAHE算法
        8.5.3     直方图规定化
    8.6  暗通道先验的去雾算法
        8.6.1  暗通道的概念与意义
        8.6.2  暗通道去雾霾的原理
        8.6.3  算法实现与应用
    本章参考文献

    【本文完】

    展开全文
  • 图像处理中数学修炼(第1版)】一书之代码

    万次阅读 多人点赞 2017-05-06 00:42:13
    数字图像处理数学的要求颇高,这不禁令很多学习者望而却步。在阅读图像处理方面的论文时,面对梯度、散度、黑塞矩阵、傅里叶变换等这些...笔者特别撰写了这本《图像处理中数学修炼》,本文是该书示例程序的源代码

    数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步。在阅读图像处理方面的论文时,面对梯度、散度、黑塞矩阵、傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展。为了弭平图像处理道路上的数学险阻,帮助更多人学好数字图像处理,并更快地具备深入研究的能力。笔者特别撰写了这本《图像处理中的数学修炼》(该书现已由清华大学出版社正式出版)。欲了解《图像处理中的数学修炼》的更多详细内容,你可以参考本书的目录

    通常,我不喜欢翻开一本技术书,里面满篇满篇的都是代码。我也不希望用代码去凑页数或者挤占宝贵的篇幅。就《图像处理中的数学修炼》一书而言,更是如此。本书的重点在于全面系统地对图像处理中可能用到的各种数学基础加以总结归纳,所以数学原理才是我们所关注的重点!

    但是如果把数学原理同图像处理实践割裂开来,又可能令某些读者觉得“英雄无用武之地”!为了真正帮读者建立起从数学原理到图像处理实践的桥梁,本书特意在后半部分安排了一些比较实用且非常经典的图像处理算法介绍,而书籍的前半部分则是纯数学部分,后半部分中的经典算法大量使用了前半部分里的数学知识,我们希望以这种方式来帮助读者夯实基础、巩固所学。

    在后半部分的图像处理算法介绍部分,偶尔为了便于理解,本书配备了必要的MATLAB代码。但所用到的代码也非常有限的。因为这并不是一本教你怎么使用MATLAB的书!全书的代码不过六百多行,主要是为了对一些比较经典但又比较复杂的算法加以解释。这些“比较经典但又比较复杂的算法”主要包括(但不限于):

    • 基于暗通道的图像去雾实现
    • 对比度有限的自适应直方图均衡(CLAHE)
    • 自适应直方图均衡(AHE)
    • 基于小波变换的图像融合(失焦图像修复)
    • 基于泊松方程的泊松融合算法(基于迭代)
    • 基于泊松方程的泊松融合算法(有限差分方法解偏微分方程)
    • 基于主成分提取(PCA)的图像压缩

    特别感谢前期试读本书的读者给予笔者的意见反馈,以及CSND博客上【图像处理中的数学原理详解】专栏的读者提出的宝贵见解。下面所列之代码已经结合之前收到的意见反馈进行了调整和优化,并修正了此前存在的一些小问题。非常感谢这部分读者为提高本书质量所做之努力。此书文字部分的勘误可以参见图像处理中的数学修炼》一书之勘误表

    重要的事情说三遍:
    代码或者编程不是这本书的重点!
    代码或者编程不是这本书的重点!
    代码或者编程不是这本书的重点!

    所以全本书也就只有这么点代码。但如果你——本书的读者——对下面这些代码实现有疑问,或者发现那里有缺失,可以直接发邮件(邮件地址见博客左侧联系方式)给作者进行咨询或者获取补充代码。你也可以在“图像处理书籍读者群”中直接联系作者,提出你的疑问,或者得到你想得到的内容。面向本书读者的沟通渠道永远都是畅通的。


    P270

    i=double(imread('vase.tif'));
    [C,S]=wavedec2(i,2,'db1');
    a2=appcoef2(C,S,'db1',2);
    dh1=detcoef2('h',C,S,1);
    dv1=detcoef2('v',C,S,1);
    dd1=detcoef2('d',C,S,1);
    dh2=detcoef2('h',C,S,2);
    dv2=detcoef2('v',C,S,2);
    dd2=detcoef2('d',C,S,2);
    [x,y]=size(i);
    img = zeros(x,y);
    img(1:x/4,1:y/4) =im2uint8(mat2gray(a2));
    img(((x/4)+1):y/2,1:y/4) = im2uint8(mat2gray(dv2));
    img(((x/4)+1):x/2,1:y/4) = im2uint8(mat2gray(dv2));
    img(1:x/4,((y/4)+1):y/2) = im2uint8(mat2gray(dh2));
    img(((x/4)+1):x/2,((y/4)+1):y/2) = im2uint8(mat2gray(dd2));
    img(((x/2)+1):x,1:y/2) = im2uint8(mat2gray(dv1));
    img(1:x/2,((y/2)+1):y) = im2uint8(mat2gray(dh1));
    img(((x/2)+1):x,((y/2)+1):y) = im2uint8(mat2gray(dd1));
    imshow(img,[]);
    

    P272

    X1 = imread('cathe1.bmp');
    X2 = imread('cathe2.bmp');
    XFUS = wfusimg(X1,X2,'sym4',5,'mean','max');
    imshow(XFUS,[]);
    

    P273

    X1 = imread('cathe1.bmp');
    X2 = imread('cathe2.bmp');
    M1 = double(X1) / 256;
    M2 = double(X2) / 256;
    N = 4;
    wtype = 'sym4';
    [c0,s0] = wavedec2(M1, N, wtype);
    [c1,s1] = wavedec2(M2, N, wtype);
    length = size(c1);
    Coef_Fusion = zeros(1,length(2));
    %低频系数的处理,取平均值
    Coef_Fusion(1:s1(1,1)) = (c0(1:s1(1,1))+c1(1:s1(1,1)))/2;
    %处理高频系数,取绝对值大者,这里用到了矩阵乘法
    MM1 = c0(s1(1,1)+1:length(2));
    MM2 = c1(s1(1,1)+1:length(2));
    mm = (abs(MM1)) > (abs(MM2));
    Y  = (mm.*MM1) + ((~mm).*MM2);
    Coef_Fusion(s1(1,1)+1:length(2)) = Y;
    %重构
    Y = waverec2(Coef_Fusion,s0,wtype);
    imshow(Y,[]);
    

    P274

    I = imread('noise_lena.bmp');
    [thr,sorh,keepapp] = ddencmp('den','wv',I);
    de_I = wdencmp('gbl',I,'sym4',2,thr,sorh,keepapp);
    imwrite(im2uint8(mat2gray(de_I)), 'denoise_lena.bmp');
    

    P298

    I = imread('baboon.bmp');  
    I1 = double(I);  
    T = hadamard(8);  
    myFun1 = @(block_struct)T*block_struct.data*T/64;  
    H = blockproc(I1, [8 8], myFun1);  
    H(abs(H)<3.5)=0;  
    myFun2 = @(block_struct)T*block_struct.data*T;  
    I2 = blockproc(H, [8 8], myFun2);  
    subplot(121), imshow(I1,[]), title('original image');  
    subplot(122), imshow(I2,[]), title('zipped image');  
    

    P299

    I = imread('baboon.bmp');  
    I1 = double(I);  
    [m n] =size(I);  
    sizi = 8;  
    num = 16;  
    %分块进行离散沃尔什变换  
    T = hadamard(sizi);  
    myFun1 = @(block_struct)T*block_struct.data*T/(sizi.^2);  
    hdcoe = blockproc(I1, [sizi, sizi], myFun1);  
    %重新排列系数  
    coe = im2col(hdcoe,  [sizi, sizi], 'distinct');  
    coe_t = abs(coe);  
    [Y, ind] = sort(coe_t);  
    %舍去绝对值较小的系数  
    [m_c, n_c] = size(coe);  
    for i = 1:n_c  
    coe(ind(1:num, i), i)=0;  
    end  
    %重建图像  
    re_hdcoe = col2im(coe, [sizi, sizi], [m, n], 'distinct');  
    myFun2 = @(block_struct)T*block_struct.data*T;  
    re_s = blockproc(re_hdcoe, [sizi, sizi], myFun2);  
    subplot(121), imshow(I1,[]), title('original image');  
    subplot(122), imshow(re_s,[]), title('compressed image');  
    

    P307

    I = imread('baboon.bmp');  
    x = double(I)/255;  
    [m,n]=size(x);  
    y =[];  
    %拆解图像  
    for i = 1:m/8;  
        for j = 1:n/8;  
            ii = (i-1)*8+1;  
            jj = (j-1)*8+1;  
            y_app = reshape(x(ii:ii+7,jj:jj+7),1,64);  
            y=[y;y_app];  
        end  
    end  
      
    %KL变换  
    [COEFF,SCORE,latent] = princomp(y);  
    kl = y * COEFF;  
      
    kl1 = kl;  
    kl2 = kl;  
    kl3 = kl;  
      
    %置零压缩过程  
    kl1(:, 33:64)=0;  
    kl2(:, 17:64)=0;  
    kl3(:, 9:64)=0;  
      
    %KL逆变换  
    kl_i = kl*COEFF';  
    kl1_i = kl1*COEFF';  
    kl2_i = kl2*COEFF';  
    kl3_i = kl3*COEFF';  
      
    image = ones(256,256);  
    image1 = ones(256,256);  
    image2 = ones(256,256);  
    image3 = ones(256,256);  
      
    k=1;  
    %重组图像  
    for i = 1:m/8;  
        for j = 1:n/8;  
      
            y = reshape(kl_i(k, 1:64),8,8);  
            y1 = reshape(kl1_i(k, 1:64),8,8);  
            y2 = reshape(kl2_i(k, 1:64),8,8);  
            y3 = reshape(kl3_i(k, 1:64),8,8);  
      
            ii = (i-1)*8+1;  
            jj = (j-1)*8+1;  
      
            image(ii:ii+7,jj:jj+7) = y;  
            image1(ii:ii+7,jj:jj+7) = y1;  
            image2(ii:ii+7,jj:jj+7) = y2;  
            image3(ii:ii+7,jj:jj+7) = y3;  
      
            k=k+1;  
        end  
    end  
    

    P356-1

    mountains = double(imread('./img/mountain.jpg'));
    moon = double(imread('./img/moon.png'));
    sizeSrc = size(mountains);
    sizeDst = size(moon);
    
    gradient_inner = moon(1:sizeDst(1)-2,2:sizeDst(2)-1,:)...
        + moon(3:sizeDst(1),2:sizeDst(2)-1,:)...
        + moon(2:sizeDst(1)-1,1:sizeDst(2)-2,:)...
        + moon(2:sizeDst(1)-1,3:sizeDst(2),:)...
        - 4*moon(2:sizeDst(1)-1,2:sizeDst(2)-1,:);
    

    P356-2

    Lap = [0, 1, 0;1, -4, 1;0, 1, 0];
    
    I1 = conv2(double(moon(:,:,1)), double(Lap));
    I2 = conv2(double(moon(:,:,2)), double(Lap));
    I3 = conv2(double(moon(:,:,3)), double(Lap));
    gradient_inner(:, :, 1) = I1(3:sizeDst(1),3:sizeDst(2));
    gradient_inner(:, :, 2) = I2(3:sizeDst(1),3:sizeDst(2));
    gradient_inner(:, :, 3) = I3(3:sizeDst(1),3:sizeDst(2));
    

    P357

    dstX = 350;dstY = 100;
    rebuilt = mountains(dstY:dstY+sizeDst(1)-1,dstX:dstX+sizeDst(2)-1,:);
    
    for n = [1:1000]
        rebuilt(2:2:sizeDst(1)-1,2:2:sizeDst(2)-1,:)= ...
            (rebuilt(1:2:sizeDst(1)-2 , 2:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1) , 2:2:sizeDst(2)-1,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 1:2:sizeDst(2)-2,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 3:2:sizeDst(2),:)...
            -gradient_inner(1:2:sizeDst(1)-2 , 1:2:sizeDst(2)-2,:))/4;
         rebuilt(3:2:sizeDst(1)-1,3:2:sizeDst(2)-1,:)= ...
            (rebuilt(2:2:sizeDst(1)-2 , 3:2:sizeDst(2)-1,:)...
            +rebuilt(4:2:sizeDst(1) , 3:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 2:2:sizeDst(2)-2,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 4:2:sizeDst(2),:)...
            -gradient_inner(2:2:sizeDst(1)-2 , 2:2:sizeDst(2)-2,:))/4;
         rebuilt(3:2:sizeDst(1)-1,2:2:sizeDst(2)-1,:)= ...
            (rebuilt(2:2:sizeDst(1)-2 , 2:2:sizeDst(2)-1,:)...
            +rebuilt(4:2:sizeDst(1) , 2:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 1:2:sizeDst(2)-2,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 3:2:sizeDst(2),:)...
            -gradient_inner(2:2:sizeDst(1)-2 , 1:2:sizeDst(2)-2,:))/4;
        rebuilt(2:2:sizeDst(1)-1 , 3:2:sizeDst(2)-1,:)= ...
            (rebuilt(1:2:sizeDst(1)-2 , 3:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1) , 3:2:sizeDst(2)-1,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 2:2:sizeDst(2)-2,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 4:2:sizeDst(2),:)...
            -gradient_inner(1:2:sizeDst(1)-2 , 2:2:sizeDst(2)-2,:))/4;
    end
    
    mountains(dstY:sizeDst(1)+dstY-1,dstX:sizeDst(2)+dstX-1,:) = rebuilt;
    figure,imshow(uint8(mountains));
    

    P360-P361

    TargetImg   = imread('pool-target.jpg');  
    SourceImg   = imread('bear.jpg');  
    SourceMask  = im2bw(imread('bear-mask.jpg'));  
    
    [SrcBoundry, ~] = bwboundaries(SourceMask, 8);
    figure, imshow(SourceImg), axis image  
    hold on  
    for k = 1:length(SrcBoundry)  
        boundary = SrcBoundry{k};  
        plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2)  
    end  
    title('Source image intended area for cutting from');
    
    position_in_target = [10, 225];%xy
    [TargetRows, TargetCols, ~] = size(TargetImg);
    [row, col] = find(SourceMask);
    start_pos = [min(col), min(row)];
    end_pos  = [max(col), max(row)];
    frame_size = end_pos - start_pos;
    
    if (frame_size(1) + position_in_target(1) > TargetCols)
        position_in_target(1) = TargetCols - frame_size(1);
    end
    
    if (frame_size(2) + position_in_target(2) > TargetRows)
        position_in_target(2) = TargetRows - frame_size(2);
    end
    
    MaskTarget = zeros(TargetRows, TargetCols);
    MaskTarget(sub2ind([TargetRows, TargetCols], row-start_pos(2)+ ...
    position_in_target(2), col-start_pos(1)+position_in_target(1))) = 1;
    
    TargBoundry = bwboundaries(MaskTarget, 8);
    figure, imshow(TargetImg), axis image
    hold on
    for k = 1:length(TargBoundry)
        boundary = TargBoundry{k};
        plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 1)
    end
    

    P362

    templt = [0 -1 0; -1 4 -1; 0 -1 0];  
    LaplacianSource = imfilter(double(SourceImg), templt, 'replicate');  
    VR = LaplacianSource(:, :, 1);  
    VG = LaplacianSource(:, :, 2);  
    VB = LaplacianSource(:, :, 3);
    
    TargetImgR = double(TargetImg(:, :, 1));  
    TargetImgG = double(TargetImg(:, :, 2));  
    TargetImgB = double(TargetImg(:, :, 3));  
      
    TargetImgR(logical(MaskTarget(:))) = VR(SourceMask(:));  
    TargetImgG(logical(MaskTarget(:))) = VG(SourceMask(:));  
    TargetImgB(logical(MaskTarget(:))) = VB(SourceMask(:));  
      
    TargetImgNew = cat(3, TargetImgR, TargetImgG, TargetImgB);  
    figure, imagesc(uint8(TargetImgNew)), axis image;
    
    AdjacencyMat = calcAdjancency(MaskTarget);
    
    ResultImgR=PoissonSolver(TargetImgR,MaskTarget,AdjacencyMat,TargBoundry);
    ResultImgG=PoissonSolver(TargetImgG,MaskTarget,AdjacencyMat,TargBoundry);
    ResultImgB=PoissonSolver(TargetImgB,MaskTarget,AdjacencyMat,TargBoundry);
    
    ResultImg = cat(3, ResultImgR, ResultImgG, ResultImgB);
    
    %% Show the final results
    figure;
    imshow(uint8(ResultImg));
    

    特别说明:函数calcAdjancency和PoissonSolver的实现请在购书群中直接联系店小二获取,详情见文末。


    P393

    image = imread('Unequalized_Hawkes_Bay_NZ.jpg');  
    Img = rgb2gray(image);  
    [height,width]=size(Img);
    
    NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
    for i = 1:height  
        for j = 1: width  
        %对应灰度值像素点数量增加一
        %因为NumPixel的下标是从1开始,但是图像像素的取值范围是0~255,
        %所以用NumPixel(Img(i,j) + 1)  
        NumPixel(Img(i,j) + 1) = NumPixel(Img(i,j) + 1) + 1;  
        end  
    end  
    
    ProbPixel = zeros(1,256);
    for i = 1:256  
        ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
    end 
    
    CumuPixel = cumsum(ProbPixel);  
    CumuPixel = uint8(255 .* CumuPixel + 0.5);  
    
    for i = 1:height  
        for j = 1: width  
            Img(i,j) = CumuPixel(Img(i,j));  
        end  
    end
    
    imshow(Img)
    

    P395-1

    a = imread('couple.tiff');
    R = a(:,:,1);
    G = a(:,:,2);
    B = a(:,:,3);
          
    R = histeq(R, 256);
    G = histeq(G, 256);
    B = histeq(B, 256);
          
    a(:,:,1) = R;
    a(:,:,2) = G;
    a(:,:,3) = B;
    imshow(a)
    

    P395-2

    Img = imread('couple.tiff');
    hsvImg = rgb2hsv(Img);
    V = hsvImg(:,:,3);
    [height,width] = size(V);
    
    V = uint8(V*255);
    NumPixel = zeros(1,256);
    for i = 1:height
        for j = 1: width
            NumPixel(V(i,j) + 1) = NumPixel(V(i,j) + 1) + 1;
        end  
    end
    
    ProbPixel = zeros(1,256);
    for i = 1:256
        ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
    end
    
    CumuPixel = cumsum(ProbPixel);
    CumuPixel = uint8(255 .* CumuPixel + 0.5);
      
    for i = 1:height  
        for j = 1: width  
            if V(i,j)==0
    			V(i,j) = CumuPixel(V(i,j)+1);
    		else 
    			V(i,j) = CumuPixel(V(i,j));
    		end 
        end  
    end  
       
    V = im2double(V);
    hsvImg(:,:,3) = V;
    outputImg = hsv2rgb(hsvImg);
    imshow(outputImg);
    

    P397

    img = imread('space.jpg');
    rimg = img(:,:,1);
    gimg = img(:,:,2);
    bimg = img(:,:,3);
    resultr = adapthisteq(rimg);
    resultg = adapthisteq(gimg);
    resultb = adapthisteq(bimg);
    result = cat(3, resultr, resultg, resultb);
    imshow(result);
    

    P398-1

    clear;  
    img = imread('space.jpg');  
    cform2lab = makecform('srgb2lab');  
    LAB = applycform(img, cform2lab);  
    L = LAB(:,:,1);  
    LAB(:,:,1) = adapthisteq(L);  
    cform2srgb = makecform('lab2srgb');  
    J = applycform(LAB, cform2srgb);  
    imshow(J);  
    

    P398-2

    clc;
    clear all;
    Img = rgb2gray(imread('space.jpg'));
    [h,w] = size(Img);  
    minV = double(min(min(Img)));
    maxV = double(max(max(Img)));
    imshow(Img);
    

    P399

    NrX = 8;
    NrY = 4;
    HSize = ceil(h/NrY);
    WSize = ceil(w/NrX);
          
    deltay = NrY*HSize - h;  
    deltax = NrX*WSize - w;  
          
    tmpImg = zeros(h+deltay,w+deltax);  
    tmpImg(1:h,1:w) = Img;  
    
    new_w = w + deltax;
    new_h = h + deltay;
    NrPixels = WSize * WSize;
    
    % NrBins - Number of greybins for histogram ("dynamic range")
    NrBins = 256;
    
    LUT = zeros(maxV+1,1);
    
    for i=minV:maxV  
        LUT(i+1) = fix(i - minV);%i+1
    end  
    
    Bin = zeros(new_h, new_w);  
    for m = 1 : new_h  
        for n = 1 : new_w  
            Bin(m,n) = 1 + LUT(tmpImg(m,n) + 1);
        end  
    end  
    
    Hist = zeros(NrY, NrX, 256);
    for i=1:NrY  
        for j=1:NrX  
            tmp = uint8(Bin(1+(i-1)*HSize:i*HSize, 1+(j-1)*WSize:j*WSize));
            %tmp = tmpImg(1+(i-1)*HSize:i*HSize,1+(j-1)*WSize:j*WSize);
            [Hist(i, j, :), x] = imhist(tmp, 256);  
        end  
    end
    
    Hist = circshift(Hist,[0, 0, -1]);
    
    ClipLimit = 2.5;  
    ClipLimit = max(1,ClipLimit * HSize * WSize/NrBins);
    Hist = clipHistogram(Hist,NrBins,ClipLimit,NrY,NrX);
    Map=mapHistogram(Hist, minV, maxV, NrBins, NrPixels, NrY, NrX);
    
    yI = 1;  
    for i = 1:NrY+1  
        if i == 1  
            subY = floor(HSize/2);
            yU = 1;
            yB = 1;
        elseif i == NrY+1  
            subY = floor(HSize/2);
            yU = NrY;
            yB = NrY;
        else
            subY = HSize;
            yU = i - 1;
            yB = i;
        end
        xI = 1;
        for j = 1:NrX+1
            if j == 1  
                subX = floor(WSize/2);
                xL = 1;
                xR = 1;
            elseif j == NrX+1
                subX = floor(WSize/2);
                xL = NrX;
                xR = NrX;
            else
                subX = WSize;
                xL = j - 1;
                xR = j;
            end
            UL = Map(yU,xL,:);
            UR = Map(yU,xR,:);
            BL = Map(yB,xL,:);
            BR = Map(yB,xR,:);
            subImage = Bin(yI:yI+subY-1,xI:xI+subX-1);  
    
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            sImage = zeros(size(subImage));
            num = subY * subX;
            for i = 0:subY - 1
                inverseI = subY - i;
                for j = 0:subX - 1
                    inverseJ = subX - j;
                    val = subImage(i+1,j+1);
                    sImage(i+1, j+1)=(inverseI*(inverseJ*UL(val)+j*UR(val))...
                                       + i*(inverseJ*BL(val)+j*BR(val)))/num;
                end
            end
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
            output(yI:yI+subY-1, xI:xI+subX-1) = sImage;
            xI = xI + subX;
        end
        yI = yI + subY;
    end  
    
    output = output(1:h, 1:w);
    figure, imshow(output, []);
    

    P404

    img = rgb2gray(imread('theatre.jpg'));
    img_ref = rgb2gray(imread('rpic.jpg'));
    [hgram, x] = imhist(img_ref);
    J = histeq(img, hgram);
    subplot(2,3,1), imshow(img), title('original image');
    subplot(2,3,4), imhist(img), title('original image');
    subplot(2,3,2), imshow(img_ref), title('reference image');
    subplot(2,3,5), imhist(img_ref), title('reference image');
    subplot(2,3,3), imshow(J), title('output image');
    subplot(2,3,6), imhist(J), title('output image');
    

    P409

    %求一幅图像的暗通道图,窗口大小为15*15
    imageRGB = imread('picture.bmp');
    imageRGB = double(imageRGB);
    imageRGB = imageRGB./255;
    dark = darkChannel(imageRGB);
    
    % 选取暗通道图中最亮的0.1%像素,从而求得大气光
    [m, n, ~] = size(imageRGB);
    imsize = m * n;
    numpx = floor(imsize/1000);
    JDarkVec = reshape(dark,imsize,1);
    ImVec = reshape(imageRGB,imsize,3);
    
    [JDarkVec, indices] = sort(JDarkVec);
    indices = indices(imsize-numpx+1:end);
    
    atmSum = zeros(1,3);
    for ind = 1:numpx
        atmSum = atmSum + ImVec(indices(ind),:);
    end
    
    atmospheric = atmSum / numpx;
    
    %求解透射率,并通过omega参数来选择保留一定程度的雾霾,以免损坏真实感
    omega = 0.95; 
    im = zeros(size(imageRGB));
    
    for ind = 1:3 
        im(:,:,ind) = imageRGB(:,:,ind)./atmospheric(ind);
    end
    
    dark_2 = darkChannel(im);
    t = 1-omega*dark_2;
    
    %通过导向滤波来获得更为精细的透射图
    r = 60;
    eps = 10^-6;
    refined_t = guidedfilter_color(imageRGB, t, r, eps);
    refinedRadiance = getRadiance(atmospheric, imageRGB, refined_t);
    

    P410

    function dark = darkChannel(imRGB)
    
    r=imRGB(:,:,1);
    g=imRGB(:,:,2);
    b=imRGB(:,:,3);
    
    [m n] = size(r);
    a = zeros(m,n);
    for i = 1: m     
        for j = 1: n
             a(i,j) = min(r(i,j), g(i,j));
             a(i,j)= min(a(i,j), b(i,j));
        end
    end
    
    d = ones(15,15);
    fun = @(block_struct)min(min(block_struct.data))*d;
    dark = blockproc(a, [15 15], fun); 
    
    dark = dark(1:m, 1:n);
    

    本书源起

    数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步。在阅读图像处理方面的论文时,面对梯度、散度、黑塞矩阵、傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展。

    大约三年前,我开始在博客上介绍一些数字图像处理中的数学基础和数学原理,并专门开设了一个“图像处理中的数学原理”专栏,其中大概收录了三十几篇文章。很多人开始留言询问我,有没有这样一本书?彼时我并没有将该系列文章付梓的想法。但是耐不住众多热情的读者不断敦促我将这个系列相对完整和系统地整理成一本可读性更强的书籍。于是便有了这本书——《图像处理中的数学修炼》。

    大约一年前清华出版社的编辑同我联系,我想或许时机已到,遂开始着手将千头万绪已经发布的和未曾发布的资料整理成书。期间为了能够更好地呈现这本书,出版日期也是一拖再拖。从最初的十一,到双十一,再到春节前,直到现在的烟花三月。这本《图像处理中的数学修炼》可真算是“千呼万唤始出来”。期间很多热情的读者三番五次地问询该书的出版进度,着实令我感觉身上压力不小。无奈好事毕竟多磨,所幸终于瓜熟蒂落。现在这本书终于同大家见面了!


    关于其他补充代码

    如果上述代码发布有缺漏,或者需要其他补充代码,请到QQ群 (155911675)联系店小二获取,注意:

    1. 请看清楚入群问题,并据实作答(否则将无法入群);——诚实守信非常重要,无论何时,都不要出卖自己的诚信!

    2. 入群后请主动联系店小二,说明来意(否则就会被删除),本群仅做购书或补充代码获取之临时使用,完成操作后请主动退群。

    3. 店小二是临时工,不会24小时在线。请尽量在工作日工作时间联系,否则入群请求可能不会被应答。

    展开全文
  • 正在读,感觉公式多了,说明少了,准备用思维导图整理后写读后感。数学应该更清晰简单,描述公理系统和框架远比上来就罗列证明更需要做在前面。我要让数学更浅显易懂。...

    正在读,感觉公式多了,说明少了,准备用思维导图整理后写读后感。数学应该更清晰简单,描述公理系统和框架远比上来就罗列证明更需要做在前面。

    我要让数学更浅显易懂。

    展开全文
  • 图像处理中数学问题 (2000版),(Mathematical Problems In Image Processing)英文版,值得搞图像处理的人好好研究
  • 图像处理中数学原理详解

    千次阅读 2018-11-26 11:32:14
    https://blog.csdn.net/baimafujinji/column/info/math-imageprocess/1
  • 数字图像处理_第三版_中文版_冈萨雷斯 系统学习数字图像处理
  • 图像处理中数学原理归类

    千次阅读 2018-10-25 18:49:12
    我的“图像处理中数学原理”专栏之系列文章已经以《图像处理中数学修炼》为名结集出版(清华大学出版社)。该书详细介绍图像处理中数学原理,为你打开一道通往图像世界的数学之门。以下是最新版本的该书的...
  • 图像处理中数学原理详解(Part1 总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 本文整理了总纲已经发布的章节及其相应链接如下。 1.1.1 数列的极限 ...
  • 自《图像处理中数学修炼》原书第一版于2017年2月上市以来,加印重印多次,在京东和当当等主流在线购书网站上已经累计有超过3200个有效购买评论,并且在这两个网站上的好评度都超过99%。结合第一版书籍读者给出的...
  • 本文给出了《图像处理中数学修炼》(第2版)的完整代码下载。自原书第一版于2017年2月上市以来,加印重印多次,在京东和当当等主流在线购书网站上已经累计有超过3200个购买评论,并且在这两个网站上的好评度都超过...
  • 很清楚的电子书,图像处理方面的一定要看看,数学知识
  • 图像处理的相关数学知识

    千次阅读 2017-08-13 13:17:33
    最近研究图像处理,发现其中有许多相关的数学知识,所以我在网上找了一下。然后在这里总结一下。 梯度: 说起梯度我们首先想到的时数学上的一个公式 gradf(x,y)=∂f∂xi+∂f∂yjgradf(x,y)=\frac{\partial f}{\...
  • 计算机视觉数学方法.pdf
  • 前面提到的一国经济增长与城市化水平关系的问题是典型二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,所以自然会想到使用矩阵来组织这些数据。为了帮助读者理解上面给出的协方差矩阵...
  • 欢迎关注我的博客专栏“图像处理中数学原理详解” 全文目录请见 图像处理中数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 1.1.3 函数的极限 ...
  • 标签: 图像处理数学内积外积 2015-12-09 15:42 5172人阅读 评论(1) 收藏 举报  分类: 数学(44)  版权声明:本文为博主原创文章,未经博主允许不得转载。 欢迎关注我的博客专栏“图像处理的...
  • 欢迎关注我的博客专栏“图像处理中数学原理具体解释”全文文件夹请见 图像处理中数学原理具体解释(总纲)http://blog.csdn.net/baimafujinji/article/details/48467225阅读本文须要最主要的线性代数知识和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,798
精华内容 719
关键字:

图像处理中的数学修炼