文档章节

视频图像处理中的频域下采样技术

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 760
阅读 5
收藏 0

         在传统的图像,视频的后处理阶段,一般会涉及到图像大小的缩放问题。这样的操作是为了适配不同屏幕分辨率的大小。例如,对于高档相机拍摄的照片,一般都很大,而要在普通显示器上显示,则要在解码图像数据之后再做缩小操作才能显示到屏幕上。对于手机屏幕,更是如此。那么,能否在图像解码的过程中实现图片的缩小?答案是肯定的。网上开源的jpeg项目早就实现了频域下采样技术。美图秀秀,QQlive等多款桌面图片应用软件也采用了这项技术,并宣称对大图的加载速度快了好几倍。不过,QQlive居然直接使用了这个库!

    

        通过在视频解码中使用频域下采样技术,我们在400M主频的手机上实现了720p的流畅解码,在400M主频的CPU上实现了1080p的视频解码,但不是很流畅。

        频域下采样技术并不是多么高深的算法,下面的matlab代码十分简洁的描述了图像的频域下采样过程。

1.  DCT域下采样算法

% dct频率域下采样算法
% 根据Dugad方法实现
%程序作者: celery.chen@yahoo.com.cn
%2010-10-12

I=imread('456.png');
I=rgb2gray(I);
figure(1);
imshow(I);
[width,height] = size(I);
block_size_x = 8;
block_size_y = 8;
x_block_num = width/block_size_x;
y_block_num = height/block_size_y;


z_dst = zeros(width/2,height/2);

pfun1 = @dct2;

I_freq = blkproc(I,[8 8],pfun1);


for i = 1: x_block_num
    for j = 1 : y_block_num
        
        P = I_freq((i-1)*8+1:(i-1)*8+4,(j-1)*8+1:(j-1)*8+4);
        P = P/2.0;
        z_dst( (i-1)*4 +1 : (i-1)*4 +4, (j-1)*4 +1 : (j-1)*4 +4) = P;  
     
    end
 end

pfun2 = @idct2;

J = blkproc(z_dst,[4 4],pfun2);
J = uint8(round(J));
figure(2);
imshow(J);

2. 另外一种DCT频域下采样算法

% dct频率域下采样算法,根据下面论文提到的算法实现
% 一种高效的DCT域图像下采样方法 中国图像图形学报 2005年4月
%程序作者: celery.chen@yahoo.com.cn ,2010-10
clc;
clear;
I=imread('456.png');
I=rgb2gray(I);
figure(1);
imshow(I);
[width,height] = size(I);
block_size_x = 8*2;
block_size_y = 8*2;
x_block_num = width/block_size_x;
y_block_num = height/block_size_y;


C16 = dctmtx(16);

 C16LL = C16(1:8,1:8);
 C16LH = C16(1:8,9:16);
 C16HL = C16(9:16,1:8);
 C16HH = C16(9:16,9:16);
 
 C8 = dctmtx(8);
 
 P = C16LL*C8';
 P = P/sqrt(2);
  
 Q = C16LH*C8';
 Q = Q/sqrt(2);
 
  E = (P + Q)/2;
  F = (P - Q)/2;



z_dst = zeros(width/2,height/2);

pfun1 = @dct2;

I_freq = blkproc(I,[8 8],pfun1);


for i = 1: x_block_num
    for j = 1 : y_block_num
        
        X1 = I_freq((i-1)*16+1:(i-1)*16+8,(j-1)*16+1:(j-1)*16+8);
				X2 = I_freq((i-1)*16+1:(i-1)*16+8,(j-1)*16+9:(j-1)*16+16);
				
				X3 = I_freq((i-1)*16+9:(i-1)*16+16,(j-1)*16+1:(j-1)*16+8);
				X4 = I_freq((i-1)*16+9:(i-1)*16+16,(j-1)*16+9:(j-1)*16+16);        
				
				
				A  = E*(X1+X3)+F*(X1-X3);
				B  = E*(X2+X4)+F*(X2-X4);
				
				XLL = (A + B) * E' + (A - B) * F';

        z_dst( (i-1)*8 +1 : (i-1)*8 +8, (j-1)*8 +1 : (j-1)*8 +8) = XLL;  
     
    end
 end

pfun2 = @idct2;

J = blkproc(z_dst,[8 8],pfun2);
J = uint8(round(J));
figure(2);
imshow(J);


本文转载自:http://www.cnblogs.com/celerychen/archive/2013/06/05/3588198.html

共有 人打赏支持
abcijkxyz
粉丝 61
博文 6196
码字总数 1876
作品 0
深圳
项目经理
一幅图弄清DFT与DTFT,DFS的关系

很多同学学习了数字信号处理之后,被里面的几个名词搞的晕头转向,比如DFT,DTFT,DFS,FFT,FT,FS等,FT和FS属于信号与系统课程的内容,是对连续时间信号的处理,这里就不过多讨论,只解释一...

宋押司
2013/07/14
0
0
AV1:下一代视频标准—约束定向增强滤波器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/81025198 本文来自Xiph.org的创始人Christopher Montgomery在Mozilla博...

livevideostack
07/13
0
0
深入浅出解释FFT(七)——fft求频谱图和功率谱密度图

频谱图: 声音频率与能量的关系用频谱表示。在实际使用中,频谱图有三种,即线性振幅谱、对数振幅谱、自功率谱。线性振幅谱的纵坐标有明确的物理量纲,是最常用的。对数振幅谱中各谱线的振幅...

wordwarwordwar
2017/04/02
0
0
移动视频编码学习笔记(二)

终于在CentOS下编译完成了FFmpeg,又好几次把系统玩的从崩溃到急救,觉得还是安心先看看入门知识好。于是结合《新一代高效视频编码》与雷霄骅大神的广电小学期视频开始了基础知识的学习。 注...

Rew小小厨
2017/12/16
0
0
【信号处理系列】关于信号变换,你需要知道的事

如何进行信号变换 什么是信号变换 离散时间傅里叶分析 离散时间傅里叶变换(DTFT) DTFT的特性 LTI系统的频域表达式 模拟信号的采样和重构 z 变换 双向z变换 z变换的重要特性 z反变换 z域的系...

AllenMoore
02/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7.* 配置网络

配置静态IP 进入配置文件目录 cd /etc/sysconfig/network-scripts 查找以 ifcfg-eno 开头的文件并编辑它 vi ifcfg-ens32 修改文件中的变量值 BOOTPROTO=staticONBOOT=yesIPADDR=192.168...

阿白
34分钟前
0
0
深入理解OAuth2.0协议

1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间。是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题。豪车一般配备两种钥匙:主钥匙和泊...

xtof
38分钟前
1
0
Linux学习-0920

3.4 usermod命令 3.5 用户密码管理 3.6 mkpasswd命令 一、usermode命令 usermode作用是用来修改用户信息。 方法: usermod 参数 username 示例1:修改用户uid usermod -u 1010 test5 示例2...

wxy丶
48分钟前
1
0
synchronized锁对象的坑

今天本来写点其他东西,碰巧写了一下synchronized,没想到掉坑里面了,大佬别笑。 起初代码大概是这样的: package com.ripplechan.part_1_2_3;import java.util.concurrent.CountDownL...

RippleChan
51分钟前
1
0
XAMPP环境搭建(Apache + MariaDB + PHP + Perl)

operation system:ubuntu-18.04.1 step1:download XAMPP #sudo wget https://www.apachefriends.org/xampp-files/7.2.9/xampp-linux-x64-7.2.9-0-installer.run step2:install XAMPP #sudo ......

硅谷课堂
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部