以前试图用三维地形图可视化二维空间中任意点的取值,演示用。如同MATLAB中peak函数产生一个二维矩阵,用surf或者mesh可视化。但peak函数不能指定”峰”在什么位置,而手工设定某点为任意值时,该点与周围没有平滑的过度,特别是设置了任意多个点的值,计算很麻烦。今天突然想到了类似Photoshop高斯模糊的方法可能行。恰好MATLAB中有fspecial(设置滤波器)和imfilter(应用滤波器)函数,果然可以。
- 初始二维矩阵,通过ones或zeros都可以。然后手工设置某点或某块的值。
- fspecial函数中有多种滤波器方法,有average, gaussian, disk, laplacian, log, motion, sobel, prewitt。
- imfilter可以使用多次,使得设定的点与周围点更平滑。
Average滤波器:
Gaussian滤波器:
Disk滤波器:
Laplacian滤波器:
Log滤波器:
Motion滤波器:
Sobel滤波器:
Prewitt滤波器:
综上,average和gaussian都可以。gaussian更好,不会改变背景值。
Gaussian不同SIGMA(0.1, 0.5, 1)和不同HSIZE的图像(8次imfilter): Gaussian等滤波器有两个参数:HSIZE,SIGMA。其中HSIZE是用HSIZE大小的区块做平滑。有些滤波器没有参数。
使用滤波器有个缺点,会拉低峰的高度。所以实际应用时,设置不同的初始高度,看哪一个处理后的值符合理想的值。