程序概要
基于MATLAB的中值滤波程序,用于读取7680x4320分辨率的RAW格式图像,对图像进行中值滤波处理,并将滤波后的图像保存为新的RAW文件。
程序架构
代码说明 :
- 输入输出:
◦ 输入为RAW格式图像文件,分辨率为7680x4320,位深为16位
(有效位深为12位,即饱和值为4095)。
◦ 输出为中值滤波后的RAW文件,保存为16位位深。 - 中值滤波逻辑:
◦ 使用MATLAB的medfilt2函数对图像进行中值滤波。
◦ filter_size参数指定滤波窗口的大小(例如3表示3x3窗口)。 - 数据提取与恢复:
◦ 从16位数据中提取低12位有效数据。
◦ 滤波后,将12位数据恢复为16位数据,保存为RAW文件。
算法原理
中值滤波的原理
中值滤波的核心思想是用像素邻域内的中值代替当前像素的值。具体步骤如下:
- 定义一个滤波窗口(通常为3x3、5x5等奇数大小的窗口)。
- 将窗口内的所有像素值求平均。
- 取排序后的中间值(即中值)作为当前像素的新值。
中值滤波的数学表达式为:
其中,W 是滤波窗口,I(x,y)是窗口内的像素值,其中median 表示取中值操作。
中值滤波的特点
- 去噪能力:中值滤波对椒盐噪声(Salt-and-Pepper Noise)特别有效。椒盐噪声表现为图像中随机出现的黑白像素点,中值滤波可以很好地去除这种噪声。
- 边缘保护:中值滤波是一种非线性滤波方法,不会像均值滤波那样对图像进行平滑处理,因此能够更好地保留图像的边缘和细节。
- 计算复杂:中值滤波需要对窗口内的像素值进行排序,因此计算复杂度较高,尤其是对于大窗口和高分辨率图像。
代码实现
MATLAB代码实现如下:
clc;clear;tic;
% 图像中值滤波模块
median_filter_raw('Image1.raw', 'filtered_image.raw', 3);
function median_filter_raw(input_file, output_file, filter_size)
% 参数说明:
% input_file : 输入的RAW格式图像文件路径
% output_file: 输出的中值滤波后RAW文件路径
% filter_size: 中值滤波的窗口大小(例如 3 表示 3x3 窗口)
% 图像参数
width = 7680; % 图像宽度
height = 4320; % 图像高度
bit_depth = 16; % 图像位深
effective_bits = 12; % 有效位深
% 打开RAW文件
fid = fopen(input_file, 'rb');
if fid == -1
error('无法打开RAW文件');
end
% 读取RAW图像数据
raw_data = fread(fid, [width, height], 'uint16'); % 读取为7680x4320的矩阵
raw_data_s = transpose(raw_data);
figure;subplot(1,2,1);imshow(raw_data_s,[0,4096]);title('Original Image');
fclose(fid);
% 将图像数据转换为双精度类型以便处理
raw_data = double(raw_data);
% 对图像进行中值滤波
filtered_data = medfilt2(raw_data, [filter_size, filter_size]);
filtered_data_s = transpose(filtered_data);
subplot(1,2,2);imshow(filtered_data_s,[0,4096]);title('Original Image');
% 保存滤波后的图像为RAW文件
fid = fopen(output_file, 'wb');
if fid == -1
error('无法创建输出文件');
end
fwrite(fid, filtered_data, 'uint16');
fclose(fid);
% 输出完成信息
fprintf('中值滤波完成!滤波后的图像已保存到 %s\n', output_file);
end
输出的图像处理前后对比示例:
可以看到图像左侧天空和楼体上的噪点处理成功。
处理后的图像整体变得平滑。
但处理后的图像锐度有所下降,线条不再锐利清晰,需要后续锐化算法进一步优化。
注意事项
-
RAW文件格式:
◦ 确保输入的RAW文件是7680x4320分辨率,16位位深,且数据按行优先存储。
◦ 如果RAW文件格式不同,需要调整读取方式。
-
滤波窗口大小:
◦ filter_size参数应为奇数(如3、5、7等),表示滤波窗口的大小。
-
性能优化:
◦ 对于7680x4320的高分辨率图像,中值滤波可能较慢。可以考虑使用MATLAB的并行计算功能(如parfor)优化性能。
-
文件路径:
◦ 确保输入和输出文件路径正确,避免文件读写错误。