要求
生成一个(2N+1)×(2N+1)大小的高斯模板H(标准为sigma),然后用此模板对图象进行检波。不容许使用fspecial来形成高斯模板,不容许使用imfilter、conv2等函数。
原理及算法
理解:高斯滤波就是对整幅图象进行加权平均的过程,每一个象素点的值,都由其本身和邻域内的其他象素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称频域、掩模)扫描图象中的每一个象素,用模板确定的邻域内象素的加权平均灰度值去代替模板中心象素点的值
步骤:
1. 高斯模板公式,计算高斯模板,即实现fspecial。
2. 实现相关算子的imfilter;相关算子方法 计算公式如下。W表示高斯算子,a,b表示算子大小。
举例说明:
Imfilter的实现,对于非中心图象点3*3中值滤波器模板,采用了两种方案。方案一:直接不处理边沿点。方案二:扩充原图象,形成一个中间图象,根据N降低边沿行和列,使得原图象中所有的点都可以处于算子的中心点。
测试结果
测试结果如下:
当sigma=1.6,N=7时。
方案一的疗效截图见右图。之前测试N=1和N=3时,效果还不错3*3中值滤波器模板,边缘的杂讯比较少,但是当弄成N=7时,效果很差,可以很明显地发觉边沿有很多杂讯。
方案二的疗效截图见右图。对比MATLAB自带的imfilter默认的滤波函数,效果不错。