一维数据滤波并求极大值

立体匹配代码准备

关键函数:

滤波medfilt1(x,n),n:滤波窗口size

findpeaks(x),返回极大值

x=[0:0.1:2*pi];
y=randn(1,length(x));
plot(x,y);
[peaks,index]=findpeaks(y);
size(peaks)
z=medfilt1(y,5);
hold on;
plot(x,z,'r');
[peaks2,index2]=findpeaks(z);
size(peaks2)

结果:

ans =


     1    17

ans =


     1     5






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!由于您提到的是bin文件,我猜测您的影像数据可能是二进制格式的,因此需要进行二进制文件的读写操作。以下是一个基于GDAL的示例代码,实现了窗口为5的极化均值滤波: ```python import numpy as np from osgeo import gdal # 打开二进制文件,读取数据并转换为numpy数组 filename = 'your_bin_file.bin' with open(filename, 'rb') as f: data = np.fromfile(f, dtype=np.float32) rows = 1000 # 影像数据的行数 cols = 1000 # 影像数据的列数 data = data.reshape(rows, cols) # 定义窗口大小和边缘宽度 win_size = 5 edge_width = (win_size - 1) // 2 # 构建输出数组 output = np.zeros((rows, cols), dtype=np.float32) # 极化均值滤波函数 def polar_mean_filter(data, x, y, win_size): win = data[x-edge_width:x+edge_width+1, y-edge_width:y+edge_width+1] flattened = win.flatten() sorted_data = np.sort(flattened) filtered = sorted_data[2:-2] # 去除最大和最小值 mean = np.mean(filtered) return mean # 循环遍历每个像素点,并进行滤波 for i in range(edge_width, rows-edge_width): for j in range(edge_width, cols-edge_width): output[i,j] = polar_mean_filter(data, i, j, win_size) # 将输出数组写入二进制文件 driver = gdal.GetDriverByName('ENVI') out_ds = driver.Create('output.bin', cols, rows, 1, gdal.GDT_Float32) out_ds.GetRasterBand(1).WriteArray(output) out_ds.FlushCache() ``` 以上代码中,首先通过`np.fromfile()`函数读取二进制文件中的数据,并将其转换为numpy数组。然后定义窗口大小和边缘宽度,以及输出数组。接着定义了一个极化均值滤波函数,该函数接受一个二维数组、中心像素点的位置以及窗口大小作为输入,返回滤波后的像素值。最后,循环遍历每个像素点,并使用`polar_mean_filter()`函数进行滤波,将结果存储到输出数组中,并使用GDAL的函数将输出数组写入二进制文件中。 需要注意的是,以上代码仅供参考,具体实现方法还需要根据您的数据格式和算法要求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值