欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

数字图像处理 冈萨雷斯 一些理解

发布时间:2024/8/1 编程问答 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数字图像处理 冈萨雷斯 一些理解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

原理版

边缘和其他灰度的急剧变化与高频分量有关,过滤高频信息可以模糊 平滑图像,衰减低频分量可以锐化图像。
m邻接的理解,首先明确m邻接概念的提出,是为了避免二义性,如下图所示,在左图中,中心位置的1到右上角的1,有两条路径,也即是二义性。采用m邻接时,当同时存在4邻接和8邻接时,只考虑4邻接。右图的情况就是m邻接,为什么可以消除掉中心的1和右上的1的邻接呢,是由于m邻接有一个条件,q的4邻域与p的4领域相交为空集(不在集合V中),而右上的1和中心的1他们的4邻接有一个交集,就是第一排中心的那个1,因此二者不满足m邻接。

像素点之间的距离
坐标分别为(x,y),(s,t)的像素p, q
欧几里得距离:

城市街区距离:


棋盘距离:

2222221112210122111222222\begin{matrix} 2&2&2&2&2\\ 2&1&1&1&2\\2&1&0&1&2\\2&1&1&1&2\\2&2&2&2&2\end{matrix}2222221112210122111222222

数字图像处理中特别重要的变换函数有如下形式:

s=T(r)=(L−1)∫0rPr(ω)dωs=T(r)=(L-1)\int_{0}^{r}P_r(\omega)d\omegas=T(r)=(L1)0rPr(ω)dω
对这个公式总是理解不了,想知道是怎么计算出来的。目前理解是,这个是一个定义,而不是通用的公式,定义了一种较为常用的变换函数,s=T(r ),做了这种变化后,s的PDF是一个均匀概率密度函数。

4.2.2傅里叶级数的系数计算
f(t)=∑n=−∞∞Cnej2πnTtf(t)= \sum\limits_{n=-\infty}^{\infty}C_ne^{\frac{j2 \pi n }{T }t}f(t)=n=CneTj2πnt
在等式的两端各乘以e−j2πkTte^{-\frac{j2 \pi k}{T }t}eTj2πkt
变为
f(t)e−j2πkTt=∑n=−∞∞Cnej2πnTte−j2πkTtf(t)e^{-\frac{j2 \pi k}{T }t}= \sum\limits_{n=-\infty}^{\infty}C_ne^{\frac{j2 \pi n }{T }t}e^{-\frac{j2 \pi k}{T }t}f(t)eTj2πkt=n=CneTj2πnteTj2πkt
在-T/2到T/2范围内,对等式进行积分
∫−T/2T/2f(t)e−j2πkTtdt=∫−T/2T/2∑n=−∞∞Cnej2πnTte−j2πkTtdt\int_{-T/2}^{T/2}f(t)e^{-\frac{j2 \pi k}{T }t}dt=\int_{-T/2}^{T/2} \sum\limits_{n=-\infty}^{\infty}C_ne^{\frac{j2 \pi n }{T }t}e^{-\frac{j2 \pi k}{T }t}dtT/2T/2f(t)eTj2πktdt=T/2T/2n=CneTj2πnteTj2πktdt
对等式的右边进行计算
∫−T/2T/2∑n=−∞∞Cnej2π(n−k)Ttdt\int_{-T/2}^{T/2} \sum\limits_{n=-\infty}^{\infty}C_ne^{\frac{j2 \pi (n-k) }{T }t}dtT/2T/2n=CneTj2π(nk)tdt
当n=k时,上式子=TCn
当n≠k时,上式子=0
因此,Cn=1T∫−T/2T/2f(t)e−j2πkTtdtC_n=\frac{1}{T }\int_{-T/2}^{T/2}f(t)e^{-\frac{j2 \pi k}{T }t}dtCn=T1T/2T/2f(t)eTj2πktdt

4.2.4
如果函数f(t)有傅里叶变换F(μ),则在点t求值后函数是F(t),它一定有变换f(-μ)。这句话一直难以理解,搜索了半天没有找到靠谱的解释,尝试写个解释。
首先推导这个结论:f(t)做傅里叶变化后为F(μ),再做傅里叶变换为f(-t)
F(μ)=∫−∞∞f(t)e−2jπμtdtF(μ)=\int_{-\infty}^{\infty}f(t)e^{-2j\pi μt}dtF(μ)=f(t)e2jπμtdt
对F(μ)进行傅里叶变换为
∫−∞∞F(μ)e−2jπμtdμ\int_{-\infty}^{\infty}F(μ)e^{-2j\pi μt}dμF(μ)e2jπμtdμ
上式子中选择对μ积分,是因为F是μ的函数,此处需要充分理解傅里叶变换了,日后再补上。
而已知f(t)=∫−∞∞F(μ)e2jπμtdμ\int_{-\infty}^{\infty}F(μ)e^{2j\pi μt}dμF(μ)e2jπμtdμ
f(-t)=∫−∞∞F(μ)e−2jπμtdμ\int_{-\infty}^{\infty}F(μ)e^{-2j\pi μt}dμF(μ)e2jπμtdμ
正是F(μ)的傅里叶变换结果。
因此,f(t)→FF(μ)→Ff(−t)f(t) \stackrel{F}{\rightarrow} F(μ) \stackrel{F}{\rightarrow}f(-t)f(t)FF(μ)Ff(t)
再来看 在点t求值后函数是F(t),它一定有变换f(-μ)。
在不赋予t 和μ物理意义时,两者实际上时没有区别的,因此可以呼唤。
5.3.2自适应中值滤波
Level A中判断Zmin<Zmed<Zmax,这个过程一直有点费解,因为Zmed是计算出来的中值,为什么会不在最小值Zmin和最大值Zmax之间呢。这里这个操作主要是为了排除所寻找的中值点是噪声点,当Zmed=Zmax,或者Zmed=Zmin,则这个中值点就是一个噪声点需要继续扩大寻找中值点的区域范围。

matlab版本

!!!function的应用
编写好函数内容后,要保存函数,切记,函数保存的文件名必须与函数名一致。
如function [p,pmax,pmin]=plotrand(f,g)这样一个函数,那么该文件需要命名为plotrand.m

imshow(f) 和imshow(f,[])的区别
imshow(f):
在matlab中,为了保证精度,经过了运算的图像矩阵f其数据类型会从uint8型编程double型。imshow()显示图像时对double型认为是0~1范围内,即大于1时都显示为白色,imshow显示uint8型时是0-255范围。
imshow(f,[ ]):
是将 f 的最大值(max(f))和最小值(min(f))分别作为纯白(255)和纯黑(0)。中间的 K 值相应地映射为 0到255 之间的标准灰度值,这样就可以正常显示了,相当于将 double 型的矩阵 S 拉伸成为了 0-255 的 uint8 型的矩阵,因此就可以正常显示。
结论:
使用 imshow(f),显示的图像如果是double类型,就会出现白色图,与imshow(f,[ ])也就显示出来了区别,当显示的图像如果是 uint8 时,两者显示的图像没有区别。

如何理解非线性空间滤波函数 colfilt 中,生成了一个mn×MN的矩阵
colfilt命令之后,将每个坐标点周围的m×n范围内的数据生成一列数据,因此这样操作后形成的矩阵有m×n行,同时因为原图数据共有M×N个点,因此形成的矩阵有M×N列,因此形成的矩阵是mn ×MN。
5.3.1 空间滤波
几何平均滤波公式如下:

但在程序看到公式为

这里是一个巧妙的写法,利用ln(a*b)=lna+lnb,因此先取了对数,再求e的次方,相当于用求和的方式求了本来需要计算的乘积。

5.3.2自适应空间滤波
adpmedian一开始很难理解,纠结为什么没有f每个点的循环,后来仔细想一下,又忽略了matlab计算的最重要优势,矩阵计算,在这个过程里g是一个矩阵,每对g做一次操作实际上是对矩阵里每个点的操作,所以不需要再对坐标循环操作,[M,N]=size(g)在这个程序里看来是没什么用的废话。为了更好的理解程序,把程序主题copy出来,去掉程序的入口,转而直接赋值了所需要的参数(这里就是给g和Smax直接赋值),一步一步进行循环,就比较好懂了,运用矩阵操作了确实会令程序简洁非常多。

总结

以上是生活随笔为你收集整理的数字图像处理 冈萨雷斯 一些理解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。