news 2026/9/4 23:18:10

基于MATLAB的图像简单降采样与高质量降采样区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于MATLAB的图像简单降采样与高质量降采样区别

文章目录

    • 文章概要
    • 算法原理
    • 程序架构
    • 代码实现
    • 注意事项

文章概要

图像降采样(Image Downsampling)是指通过减少图像像素数量来降低图像分辨率的过程。
这一过程在图像处理中非常重要,主要用于以下几个方面:

  1. 减少存储空间和计算资源:降低图像分辨率可以减少图像文件的大小,从而节省存储空间。同时,处理低分辨率图像所需的计算资源也相对较少,可以提高图像处理和分析的效率。
  2. 生成缩略图:在网页浏览、图像管理软件等应用中,生成缩略图可以快速预览大量图像,提高用户体验。
  3. 特征提取:在计算机视觉和机器学习中,降采样可以用于提取图像的主要特征,去除噪声和细节,从而简化后续的分析和识别任务。
    以下是一个基于MATLAB的8K(7680×4320)12bit图像降采样为1080p(1920×1080)12bit图像的程序,保留12bit有效数据并进行降采样,分别进行简单降采样与高质量降采样,并进行对比。

算法原理

简单降采样的原理
简单降采样将距离输出图像像素最近的输入图像像素值作为输出像素值。这种方法简单高效,但可能会导致图像出现锯齿状的边缘。本程序中在4*4的像素区域中,直接选取第个像素为采样像素。

高质量降采样的原理
高质量降采样通过计算输出像素及周围共16个输入像素的加权平均值来得到输出像素值。这种方法可以得到更高质量的图像,但计算量较大。本程序中在4*4的像素区域中,计算16个输入像素的均值为采样像素。

程序架构

简单降采样代码说明 :

  1. 简单快速降采样:
    每个4×4块直接取第一个像素;
    处理速度比区域平均法快约4倍。
  2. 保持原始数据:
    不引入插值或平均计算;
    保留原始像素值。
  3. 定位规则:
    从每个块的(1,1)位置取样;
    保证取样位置的一致性。

高质量降采样代码说明 :

  1. 高质量降采样:
    采用区域平均算法,每个1080p像素对应8K图像的4×4区域的平均值;
    相比简单抽取,能更好保留图像细节和减少混叠。
  2. 边界处理:
    自动处理图像边界区域;
    保证输出图像严格为1920×1080分辨率。
  3. 内存优化:
    按行处理大图像,减少内存占用。

输入输出:
◦ 输入包括目标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_8k=7680;% 8K图像宽度height_8k=4320;% 8K图像高度width_1080p=1920;% 1080p图像宽度height_1080p=1080;% 1080p图像高度bit_depth=16;% 文件存储位深effective_bits=12;% 有效位深block_size=4;% 降采样块大小% 读取8K RAW图像fid=fopen(input_path,'rb');iffid==-1error('无法打开输入文件');endimg_8k=fread(fid,[width_8k,height_8k],'uint16');fclose(fid);% 转换为双精度浮点以便处理img_8k=double(img_8k);% 计算降采样比例ratio_x=width_8k/width_1080p;% 水平降采样比例 (4:1)ratio_y=height_8k/height_1080p;% 垂直降采样比例 (4:1)% 初始化1080p图像img_1080p=zeros(width_1080p,height_1080p);% 简单降采样:每个4x4块取第一个像素fory=1:height_1080pforx=1:width_1080p% 计算8K图像中对应的位置x_8k=(x-1)*block_size+1;y_8k=(y-1)*block_size+1;% 直接取第一个像素值img_1080p(x,y)=img_8k(x_8k,y_8k);endend% 保存1080p图像fid=fopen(output_path,'wb');iffid==-1error('无法创建输出文件');endfwrite(fid,img_1080p,'uint16');fclose(fid);disp(['降采样完成!1080p图像已保存至: 'output_path]);end

MATLAB代码高质量降采样实现如下:

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_8k=7680;% 8K图像宽度height_8k=4320;% 8K图像高度width_1080p=1920;% 1080p图像宽度height_1080p=1080;% 1080p图像高度bit_depth=16;% 文件存储位深effective_bits=12;% 有效位深% 读取8K RAW图像fid=fopen(input_path,'rb');iffid==-1error('无法打开输入文件');endimg_8k=fread(fid,[width_8k,height_8k],'uint16');fclose(fid);% 转换为双精度浮点以便处理img_8k=double(img_8k);% 计算降采样比例ratio_x=width_8k/width_1080p;% 水平降采样比例 (4:1)ratio_y=height_8k/height_1080p;% 垂直降采样比例 (4:1)% 初始化1080p图像img_1080p=zeros(width_1080p,height_1080p);% 高质量区域平均降采样fory=1:height_1080pforx=1:width_1080p% 计算8K图像中对应的区域x_start=floor((x-1)*ratio_x)+1;x_end=floor(x*ratio_x);y_start=floor((y-1)*ratio_y)+1;y_end=floor(y*ratio_y);% 提取区域并计算均值region=img_8k(x_start:x_end,y_start:y_end);img_1080p(x,y)=mean(region(:));endend% 保存1080p图像fid=fopen(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高质量降采样图中被处理掉了,起到了滤波降噪的效果,如下所示:

注意事项

简单降采样注意事项:

  1. 这种方法可能会导致图像出现锯齿现象。

  2. 适合对处理速度要求高、对图像质量要求不苛刻的场景。

  3. 如需更好质量但稍慢的处理,可使用高质量降采样方法。

  4. 取样位置固定为块左上角,如需中心像素可修改x_8k/y_8k的计算公式。

如果需要选择其他取样位置(如中心像素),只需修改以下代码部分:

% 改为取4x4块的中心像素x_8k=(x-1)*block_size+floor(block_size/2);y_8k=(y-1)*block_size+floor(block_size/2);

高质量降采样注意事项:

  1. 如需处理不同分辨率,需调整代码中的尺寸参数。

  2. 对于超大图像处理可能需要较长时间(约1-2分钟)。

  3. 如需进一步优化处理速度,可以考虑使用MATLAB的并行计算功能(parfor)或GPU加速。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 13:50:12

MinerU插件3步装好:PDF转Markdown 10分钟

MinerU插件3步装好:PDF转Markdown 10分钟 【免费下载链接】MinerU Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows. 项目地址: https://gitcode.com/GitHub_Trending/mi/MinerU MinerU 是…

作者头像 李华
网站建设 2026/8/31 12:30:25

从混乱文档到结构化知识:Hyper-Extract 完整工作流图解

从混乱文档到结构化知识:Hyper-Extract 完整工作流图解 【免费下载链接】Hyper-Extract Hypergraph is more powerful. Transform unstructured text into structured knowledge with LLMs. Graphs, hypergraphs, and spatio-temporal extractions — with one comm…

作者头像 李华
网站建设 2026/8/31 22:34:20

告别餐饮经验备货:餐链AI预估如何让餐饮日清日结成为可能

在餐饮行业进入存量竞争时代的今天,“看得到流水,摸不清利润”已成为众多餐饮经营者的真实写照。食材损耗多少、采购是否合理、每日盈亏几何——这些关乎企业生存的核心问题,仅靠经验和零散报表,往往难以理清头绪。传统模式下&…

作者头像 李华
网站建设 2026/8/31 22:34:28

STM32定时器深度解析:从PWM生成到输入捕获的实战指南

1. 项目概述:为什么STM32的定时器是工程师的“瑞士军刀”? 如果你正在用STM32F103ZET6做项目,无论是驱动一个智能小车、控制步进电机,还是做高精度的频率测量,有一个模块你几乎绕不开,那就是定时器。很多人…

作者头像 李华
网站建设 2026/9/1 6:38:56

MinerU PDF 转换指南:如何按需组合模块并完成 GPU 加速配置

MinerU PDF 转换指南:如何按需组合模块并完成 GPU 加速配置 【免费下载链接】MinerU Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows. 项目地址: https://gitcode.com/GitHub_Trending/mi/Min…

作者头像 李华
网站建设 2026/8/31 17:35:14

Python数据可视化实战:用Pandas+Matplotlib自动化生成专业图表

1. 项目概述:从数据到图形的自动化旅程 如果你手头有一份包含多列数据的CSV或Excel文件,比如实验记录、销售报表或者传感器日志,而你的老板或导师又急需一份清晰直观的趋势图来汇报,你会怎么做?是打开Excel手动拖拽生成…

作者头像 李华