文档章节

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

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 760
阅读 5
收藏 0
点赞 0
评论 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);


© 著作权归作者所有

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

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

宋押司 ⋅ 2013/07/14 ⋅ 0

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

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

wordwarwordwar ⋅ 2017/04/02 ⋅ 0

移动视频编码学习笔记(二)

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

Rew小小厨 ⋅ 2017/12/16 ⋅ 0

【信号处理系列】关于信号变换,你需要知道的事

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

AllenMoore ⋅ 02/03 ⋅ 0

关于对傅里叶变换的一些理解

近日以来,由于学习图像处理,感觉其对傅里叶变换等内容要求较高,故重整旗鼓又过了一遍信号系统等章节,做了不少实验,有所感悟,特记录下,以便备忘! 首先,对于傅里叶变换,最为需要理解...

文剑Boy ⋅ 2015/04/06 ⋅ 0

图像处理入门教程

  最近有人问我图像处理怎么研究,怎么入门,怎么应用,我竟一时语塞。仔细想想,自己也搞了两年图像方面的研究,做个两个创新项目,发过两篇论文,也算是有点心得,于是总结总结和大家分享...

u013088062 ⋅ 2015/12/29 ⋅ 0

基于TensorFlow,人声识别如何在端上实现?

现有的人声识别绝大部分在服务端实现,这会带来如下两方面的问题: 1) 当网络较差的情况下会造成较大的延时,带来较差的用户体验。 2) 当访问量较大的情况下,会大量占用服务端资源。 为解决...

技术小能手 ⋅ 05/14 ⋅ 0

RCP版的数字图像处理软件

这个项目是大三上学期学习数字图像处理时,我用Eclipse RCP开发的一个软件,实现了各种图像处理,包括反色,灰度化,直方图均衡化,空间域的低通滤波和高通滤波等等,频域率由于时间和能力限...

宅男潇涧 ⋅ 2013/05/19 ⋅ 2

yuv和yCbCr的差异

一、和rgb之间换算公式的差异 yuv<-->rgb Y'= 0.299R' + 0.587G' + 0.114B' U'= -0.147R' - 0.289G' + 0.436B' = 0.492(B'- Y') V'= 0.615R' - 0.515G' - 0.100B' = 0.877(R'- Y') R' = Y' ......

卓尔 ⋅ 2013/03/01 ⋅ 0

朗锐智科图像采集卡在车流量检测的应用

如今是智能交通时代,车流量的检测方法虽然有很多种,但是,这些方法中多多少少还是存在了一定的弊端。 图像采集卡 例如,超声波频检测技术:采取接收从车辆或地面反射回来的超声波来判断有无...

gunser ⋅ 05/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 15分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 23分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 41分钟前 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 56分钟前 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 58分钟前 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 58分钟前 ⋅ 0

centos7下创建新用户并授权

1、创建新用户 创建一个用户名为:test adduser test 创建初始密码: passwd test 2、授予root权限 个人用户的权限只可以在/home/test下有完整权限,其他目录要看别人授权。而经常需要roo...

xixingzhe ⋅ 今天 ⋅ 0

求助:TiledMap如何旋转对象呢?

比如我要旋转一个梯子的角度,单纯在TiledMap旋转角度好像没有效果。那是要用代码来控制角度,还是说只能通过导入相对应的斜的图片才可以呢?

花谢自相惜 ⋅ 今天 ⋅ 0

Micronaut 之HelloWorld!

小试一下Micronaut,按照官方文档跑了一下helloworld 第一步克隆,按照官方文档是: git clone git@github.com:micronaut-projects/micronaut-core.git 结果怎么是这样?? 换个方法吧 git ...

桂哥 ⋅ 今天 ⋅ 0

pom文件

Aeroever ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部