扩展函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
概念
以空间频率为变量的传递的像的调制度和相移的函数。
一个非相干照明的光学成像系统,像的强度也是线性的,满足叠加原理。
为了得到点光源的像强度分布,用几何光学概念即像是物的准确再现是不行的。
必须考虑衍射效应,才能对物和像之间关系有更全面理解。
根据光的衍射理论可以研究点光源至透镜、至像平面光波的整个传播过程,最后得出像平面上强度分布是透镜孔径函数的夫琅和费衍射图样,称为光学系统的强度脉冲响应,或点扩展函数。
由它可以确定光学系统的成像性质,因为任意复杂物体由无数点源组成,其像的强度为物强度与点扩展函数的卷积。
性质
图1a表示一个无像差理想光学成像系统的点扩展函数。
利用点扩展函数概念可对光学系统的分辨率作出判据,例如对于两个点源组成的物,在像平面上的强度分布是相应两点扩展函数的叠加。
当两点源距离小于点扩展函数的半宽度即点扩展函数第一零点的半径时,两点源在像平面上不能分辨。
与研究电学系统相似,引入傅里叶分析方法,考虑输入各种不同空间频率的物函数,观察光学系统像面上输出情况,例如物是余弦形式的光栅,其中A是振幅或调制度,因光学系统是线性的,所以像强度分布也是余弦形式,但它的振幅和位相会受系统的影响,因此光栅的像可写成如图2所示。
其中│T(v)│、嗞(v)分别表示系统引起的振幅衰减和相移。
从图2可见,正弦光栅经光学系统成像后,比原物相比反衬度降低,最高强度降低,最低强度升高,设T(v)满足0≤T(v)≤1。
另外还会产生相移嗞(v)。
原来亮线条的位置会向暗线条方向移动。
当嗞(v)=π时,亮线条移到原物暗线条位置,发生物和像中黑白位置互换现象。
定义为系统的光学传递函数(OTF)。
其模|T(v)|称调制传递函数(MTF),位相嗞(v)称位相传递函数(PTF)。
T(v)是空间频率v的函数,改变v可测得T(v)随v变化曲线,反映系统对各空间频率的传递情况。
对T(v)=1即零空间频率的图像信息,在系统中传递不受损失;而对那些T(v)=0的图像频率成分,会在像强度分布中消失。
一般地,T(v)是复数,图1b是嗞(v)=0的特例,此
时传递函数是实函数。
光学传递函数(OTF)点扩展函数是一点光源经光学系统后所成的衍射斑分布的函数。
它在空域表征光学系统的特性,传递函数在频域表征系统的特性。
实际上两者有简单关系,即点扩展函数的傅里叶变换就是光学系统的传递函数。
点扩展函数与透镜的孔径函数有关,传递函数也与孔径函数有关。
事实上传递函数是孔径函数的自相关函数。
一个光学系统质量的评价,早期采用“星点”法,即观察点光源的像的强度分布,实质上是把对点扩展函数形状的观察作为像质评价的判据。
这种方法虽然直观,但带有主观性,不能作定量评价。
现在人们广泛用传递函数作为像质评价的判据,使质量评价进入客观计量。
与海洋研究的关系
近代光学的重要特点之一是关于光信息的研究。
激光的水中传输和水中图象的传输,实质上是通过海水介质的光信息的传输过程。
70年代,不少研究者应用线性系统理论来讨论水中激光或图象的传输。
把考虑传输过程的海水介质视为一个线性系统,则系统的性能完全由系统的脉冲响应即点扩展函数来确定(见水中能见度)。
若已知海水介质的点扩展函数或脉冲响应,则水中图象或激光传输结果为输入图象或激光束分布与海水介质点扩展函数的卷积。
海水介质的点扩展函数的傅里叶变换,称为海水介质的光学传递函数,它表征海水介质线性系统的频谱响应。
水下图象系统或激光雷达系统的传输性能,由接收系统、发射系统和海水介质的光学传递函数的乘积所决定。
近代光学的信息传递理论和实验方法,还可应用于海洋光学辐射传递理论研究和海洋光学基本参数的测量。
另外,光电子技术是近代应用光学中的活跃分支,它在海洋研究中有广泛的应用,涉及了遥感遥测技术、激光技术、光信息处理方法等。
1、在什么情况下使用
使用扩展函数,可以为无法修改源代码的对象添加新的方法,或者强制让对象支持某些方法,这些方法看起来就是对象本来就有的功能。
当我们在对类A的进行操作时,发现类A中没有某些方法,我们又不能对类A直接修改,但是我们又要用到该方法时,可以用扩展函数的功能新建一个类,并且创建要使用的方法。
2、使用方法:
声明扩展函数:扩展函数使用特定的关键字this作为修饰符应用于函数的第一个参数来声明。
扩展函数只能声明在static的类中
导入扩展函数:扩展函数通过using-namespace-directives 导入。
另外导入的有,该namespace所包含的类型,using-namespace-directive 导入所有的扩展函数在该namespace 中的所有static类。
被导入的扩展函数有效地作为在某些类型上的额外函数,这是通过它们的第一个关键字以及比常规的实例函数更低的优先级所给与的。
扩展函数的调用:如果正常的调用过程中没有发现适用的实例函数(尤其如果对此调用的候选函数为空的情况下),编译器将做出尝试将构造过程作为扩展函数来调用。
3、限制条件
1、必须在static class 中定义,所以必须使用static修饰
2、需要在(只需要在)第一个参数前面使用this修饰
3、扩展函数可以通过对象实例调用,也可以使用定义该函数的静态类直接调用
4、简单的例子
新建一个类:
publicstaticclass E {
publicstaticstring F(thisobject obj, int i)//扩展函数 {
return"E:"+i.ToString();
}
publicstaticstring F(thisobject obj, string s)
{
return"E:" + s;
}
}
class A {//类A中没有方法
}
class B {
publicstring F(int i)
{
return"B:" + i.ToString();
}
}
class C {
publicstring F(object obj)
{
return"C:" + obj.ToString();
}
}
添加相应函数如下:
//B的函数优先于前面的扩展函数,并且C的函数优先于所有的扩展函数。
protectedvoid Button1_Click(object sender, EventArgs e) {
A a = new A(); //A中没有F()函数,将
调用扩展函数
Label1.Text=a.F(1); //
E.F(object, int)
Label1.Text +="<br/>"+ a.F("hello"); //
E.F(object, string)
B b = new B(); //B中有F(int),则调用
此,没有对string的操作,调用扩展函数。
Label1.Text += "<br/>" + b.F(1); //
B.F(int)
Label1.Text += "<br/>" + b.F("hello"); //
E.F(object, string)
C c=new C();
Label1.Text += "<br/>" + c.F(1); //
C.F(object)
Label1.Text += "<br/>" + c.F("hello"); //
C.F(object)
}
运行结果如下:
5、使用范围
扩展函数本质上是在被扩展的对象实例上可以调用的静态函数,不是继承,所以不同于普通的成员函数,扩展函数不能直接访问被扩展对象的成员。
只能通过该对象的实例来访问。
6、扩展接口类型
在接口中必须给出方法的实现
但是,如果只是如下扩展,将会发生错误
必须给出函数的实现
扩展接口后,显然不能直接在接口上调用这些扩展函数,只能理解为,所有继承该接口的对象新增加了这些扩展函数功能,。