
文章目录文章概要算法原理程序架构代码实现注意事项文章概要图像降采样Image Downsampling是指通过减少图像像素数量来降低图像分辨率的过程。这一过程在图像处理中非常重要主要用于以下几个方面减少存储空间和计算资源降低图像分辨率可以减少图像文件的大小从而节省存储空间。同时处理低分辨率图像所需的计算资源也相对较少可以提高图像处理和分析的效率。生成缩略图在网页浏览、图像管理软件等应用中生成缩略图可以快速预览大量图像提高用户体验。特征提取在计算机视觉和机器学习中降采样可以用于提取图像的主要特征去除噪声和细节从而简化后续的分析和识别任务。以下是一个基于MATLAB的8K(7680×4320)12bit图像降采样为1080p(1920×1080)12bit图像的程序保留12bit有效数据并进行降采样分别进行简单降采样与高质量降采样并进行对比。算法原理简单降采样的原理简单降采样将距离输出图像像素最近的输入图像像素值作为输出像素值。这种方法简单高效但可能会导致图像出现锯齿状的边缘。本程序中在4*4的像素区域中直接选取第个像素为采样像素。高质量降采样的原理高质量降采样通过计算输出像素及周围共16个输入像素的加权平均值来得到输出像素值。这种方法可以得到更高质量的图像但计算量较大。本程序中在4*4的像素区域中计算16个输入像素的均值为采样像素。程序架构简单降采样代码说明 简单快速降采样每个4×4块直接取第一个像素处理速度比区域平均法快约4倍。保持原始数据不引入插值或平均计算保留原始像素值。定位规则从每个块的(1,1)位置取样保证取样位置的一致性。高质量降采样代码说明 高质量降采样采用区域平均算法每个1080p像素对应8K图像的4×4区域的平均值相比简单抽取能更好保留图像细节和减少混叠。边界处理自动处理图像边界区域保证输出图像严格为1920×1080分辨率。内存优化按行处理大图像减少内存占用。输入输出◦ 输入包括目标8K图像文件input_path为 7680x4320 分辨率、16 位位深的 RAW 格式图像。有效位深为12位即饱和值为4095。◦ 输出为降采样后的 RAW 文件output_path为1080p分辨率。代码实现MATLAB代码简单降采样实现如下clc;clear;tic;%基于MATLAB的8K(7680×4320)12bit图像降采样为1080p(1920×1080)12bit图像的程序保留12bit有效数据并进行简单降采样% 将8K图像降采样为1080pdownsample_8k_to_1080p(Image1_8K.raw,Image1_1080p_sub.raw);functiondownsample_8k_to_1080p(input_path,output_path)% 参数说明% input_path: 输入的8K RAW格式图像文件路径% output_path: 输出的1080p RAW格式图像路径% 图像参数width_8k7680;% 8K图像宽度height_8k4320;% 8K图像高度width_1080p1920;% 1080p图像宽度height_1080p1080;% 1080p图像高度bit_depth16;% 文件存储位深effective_bits12;% 有效位深block_size4;% 降采样块大小% 读取8K RAW图像fidfopen(input_path,rb);iffid-1error(无法打开输入文件);endimg_8kfread(fid,[width_8k,height_8k],uint16);fclose(fid);% 转换为双精度浮点以便处理img_8kdouble(img_8k);% 计算降采样比例ratio_xwidth_8k/width_1080p;% 水平降采样比例 (4:1)ratio_yheight_8k/height_1080p;% 垂直降采样比例 (4:1)% 初始化1080p图像img_1080pzeros(width_1080p,height_1080p);% 简单降采样每个4x4块取第一个像素fory1:height_1080pforx1:width_1080p% 计算8K图像中对应的位置x_8k(x-1)*block_size1;y_8k(y-1)*block_size1;% 直接取第一个像素值img_1080p(x,y)img_8k(x_8k,y_8k);endend% 保存1080p图像fidfopen(output_path,wb);iffid-1error(无法创建输出文件);endfwrite(fid,img_1080p,uint16);fclose(fid);disp([降采样完成1080p图像已保存至: output_path]);endMATLAB代码高质量降采样实现如下clc;clear;tic;%基于MATLAB的8K(7680×4320)12bit图像降采样为1080p(1920×1080)12bit图像的程序保留12bit有效数据并进行高质量降采样% 将8K图像降采样为1080pdownsample_8k_to_1080p(Image1_8K.raw,Image1_1080p.raw);functiondownsample_8k_to_1080p(input_path,output_path)% 参数说明% input_path: 输入的8K RAW格式图像文件路径% output_path: 输出的1080p RAW格式图像路径% 图像参数width_8k7680;% 8K图像宽度height_8k4320;% 8K图像高度width_1080p1920;% 1080p图像宽度height_1080p1080;% 1080p图像高度bit_depth16;% 文件存储位深effective_bits12;% 有效位深% 读取8K RAW图像fidfopen(input_path,rb);iffid-1error(无法打开输入文件);endimg_8kfread(fid,[width_8k,height_8k],uint16);fclose(fid);% 转换为双精度浮点以便处理img_8kdouble(img_8k);% 计算降采样比例ratio_xwidth_8k/width_1080p;% 水平降采样比例 (4:1)ratio_yheight_8k/height_1080p;% 垂直降采样比例 (4:1)% 初始化1080p图像img_1080pzeros(width_1080p,height_1080p);% 高质量区域平均降采样fory1:height_1080pforx1:width_1080p% 计算8K图像中对应的区域x_startfloor((x-1)*ratio_x)1;x_endfloor(x*ratio_x);y_startfloor((y-1)*ratio_y)1;y_endfloor(y*ratio_y);% 提取区域并计算均值regionimg_8k(x_start:x_end,y_start:y_end);img_1080p(x,y)mean(region(:));endend% 保存1080p图像fidfopen(output_path,wb);iffid-1error(无法创建输出文件);endfwrite(fid,img_1080p,uint16);fclose(fid);disp([降采样完成1080p图像已保存至: output_path]);end输出的图像处理前后对比示例如下从左至右分别是8K原图、1080p简单降采样图、1080p高质量降采样图可以看到整体略缩图并无区别物体信息没有偏差。8K原图区域细节图如下所示1080p简单降采样图区域细节图如下所示1080p高质量降采样图区域细节图如下所示可以看到同视场下原始图像到降采样图像细节丢失严重。但高质量降采样比简单降采样图像线条连续、明暗过渡更加自然。8K原图一些区域的坏点、噪点如下所示在1080p简单降采样图得到了一些保留及放大如下所示但在1080p高质量降采样图中被处理掉了起到了滤波降噪的效果如下所示注意事项简单降采样注意事项这种方法可能会导致图像出现锯齿现象。适合对处理速度要求高、对图像质量要求不苛刻的场景。如需更好质量但稍慢的处理可使用高质量降采样方法。取样位置固定为块左上角如需中心像素可修改x_8k/y_8k的计算公式。如果需要选择其他取样位置如中心像素只需修改以下代码部分% 改为取4x4块的中心像素x_8k(x-1)*block_sizefloor(block_size/2);y_8k(y-1)*block_sizefloor(block_size/2);高质量降采样注意事项如需处理不同分辨率需调整代码中的尺寸参数。对于超大图像处理可能需要较长时间约1-2分钟。如需进一步优化处理速度可以考虑使用MATLAB的并行计算功能parfor或GPU加速。