- 博客(21)
- 资源 (2)
- 收藏
- 关注
原创 块匹配的运动估计算法
一、运动估计定义这里指的是基于块的运动估计,基本思想是将图像序列的每一帧分成许多互不重叠的块,并认为块内所有像素的位移量都相同,然后对每个宏块到参考帧某一给定特定搜索范围内根据一定的块匹配准则找出与当前块最相似的块,即匹配块,匹配块与当前块的相对位移即为运动矢量。二、分类运动估计计算法可分为两大类,即基于非参数运动模型的运动估计和基于参数模型的运动估计。非参数运动估计需要显式的边界条件才能获取物体的运动信息,比如光流场方程和随机场法。参数模型运动估计假设每一个图像块都做刚体运动,并且可以用一组参数来描
2020-08-02 17:19:55 3643
原创 三大编码法宝:预测,变换量化,熵编码
1.为什么要变换?变换可以去除图像像素之间的空间相关性。变换是一种线性运算,可以将图像从空间域转换到变换域或者频率域。空间域图像的能量往往分布相对比较均匀 ,经过变换后,变换域中图像的变换系数间近似是统计独立 的, 基本去除了相关’性,并且能量集中在直流和低频率 的变换系数, 高频率变换系数的能量很小, 甚至大部分高拟系数能量接近于零。所以,在变换域进行滤波、进行与视觉特性相匹配的量化及熵编码,可以实现图像数据的有效压缩。变换的核心点是找到一个完美的正交矩阵,那什么样的正交变换矩阵才算是完美的呢?最
2020-08-02 16:56:39 2716
原创 请你描述一下输入N帧YUV图像后得到编码码流的过程以及解码过程?
一、编码原始数字图像YUV输入到编码器后,进行视频预处理,分析复杂度,检测场景切换,确定GOP结构和帧类型,或者图像序列去噪。分割成或不重叠的宏块X,进入以宏块为编码单元的编码回路中。然后根据帧类型采用帧内预测或者帧间预测获得当前X的预测块Xp。差分编码的到预测误差图像△X。误差图像进行8x8或者4x4块级DCT变换,量化得到量化系数,经游程编码,可变长编码,熵编码产生量化系数对应的的编码比特。同时量化块经过逆量化,逆变换得到含有量化失真的误差图像△X’,与预测图像Xp相加重构出解码图像。解码图像一
2020-07-26 14:25:40 493
原创 视频播放器是如何播放音视频的?
当我们用手机或者电脑打开一个电影视频或者一首音频歌曲的时候,不论是在线流量还是离线本地播放,通常设备上的音视频播放器都可以将音视频文件中的画面和声音给到我们的视觉和听觉器官,这是我们习以为常的东西。但不知你是否有考虑过,播放器底层究竟是如何处理音视频文件的呢?如果你对音视频有一些基础和了解,应该知道通常播放一段音视频的基本流程是:解协议 → 解封装 → 解码 → 视音频同步这几大步骤。这里的解协议通常对应的是网络流媒体传输音视频,比如RTMP协议,RTSP协议,HTTP协议等。解完协议之后我们得到的是采用
2020-07-25 19:26:09 1147
原创 X264码率控制概述
一、控制架构二、QP计算步骤第一步:计算当前帧的模糊复杂度对当前帧图像做抽样滤波,得到分辨率是原来一半的小图,在小图上做半像素精度预测,与原图相减得到残差Xd,再对Xd做hadamond变换并求绝对和得到SATD,然后:第二步:根据速率控制公式计算感知编码//rceq = rc estimated qscale其中qcomp为线性量化控制参数,0为固定码率即CBR模式,为1固定QP,默认值是0.6。第三步:计算rate_factorwanted_bits_window表示已编码帧的目标
2020-07-13 13:21:04 571
原创 elecard软件分析H264参数说明
1. FILE信息file type : PSvideo stream type : AVC/H.264resolution : 1920x1080profile:level : Main:4.2aspect ratio : 16x9(unspecified)interlaced :
2020-07-13 13:03:15 1637
原创 x264.c主线程调用说明
main()main_internal():x264_threading_init():parse():Parse command line datasigint_handler():设置b_ctrl_c = 1;encode():x264_encoder_open():x264_threading_init():validate_parameters():x264_cqm_parse_file():x264_reduce_fraction():x264_sps_init():根据输入
2020-07-13 12:41:03 561
原创 x264速率控制方法的定性概述【翻译】
By Loren Merritt*Historical note: This document is outdated, but a significant part of it is still accurate. Here are some important ways ratecontrol has changed since the authoring of this document:By default, MB-tree is used instead of qcomp for weig
2020-07-13 11:15:07 214
原创 CPP之剑指 Offer 57 - II. 和为s的连续正数序列
题目描述:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]题目分析:根据题目要求,让我们找到所有和为target的正整数连续序列,即输入int类型的target,输出一个二维数组。函数形式如下:vector<
2020-07-12 16:22:20 93
原创 CPP之剑指 Offer 58 - II. 左旋转字符串
题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”题目分析:题目要求就是实现一个坐旋转字符串的函数。输入是一个string s和需要旋转的位数int n
2020-07-12 16:01:28 128
原创 CPP之剑指 Offer 60. n个骰子的点数
题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111
2020-07-12 15:27:52 119
原创 CPP之剑指 Offer 61. 扑克牌中的顺子
题目描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True题目分析:根据题意,函数名暂定为isStraight,函数输入是一维数组且大小为5,vector& nums,输出是0或1。bool isStraight(vector<i
2020-07-12 14:58:54 147
原创 CPP之剑指 Offer 63. 股票的最大利润
题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。题目分析:根据题目可以知道,函数
2020-07-12 14:43:59 191
原创 CPP之剑指 Offer 64. 求1+2+…+n
题目描述:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45题目分析:既然不能使用加减乘除等等诸多工具,那就递归吧。代码:class Solution {public: int sumNums(int n) { n && (n += sumNums(n-1));
2020-07-12 14:30:07 82
原创 H264编码之预测
1.为什么预测编码可以消除图像的时空域的冗余?2.为什么预测编码后的码流,解码器可以保证完全恢复?3.为什么预测编码要分为帧内编码和帧间编码?关于第一个问题:我们知道,预测编码处理的时候,我们不直接传送图像像素值到后面模块,比如量化编码模块,而是对图像像素实际值和它的预测值做差,再对差值进行编码。如果将差值进行量化再熵编码,这种预测编码方式我们叫做差分脉冲编码调制,DPCM(differential pulse code modulation)。从统计学上看,预测误差的取值范围通常在0附近的小范围
2020-07-12 14:13:04 497
原创 CPP剑指 Offer 65. 不用加减乘除做加法
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0,结果不会溢出 32 位整数解题思路不能使用加减乘除四则运算,所以只能返本溯源想到使用二进制的位运算实现相加操作。二进制位运算中,异或操作: 1^1=0 0^0=0 1^0=1 0^1=1,可以模拟无进位的加操作;与操作:1&1=1 0&1=0 1&0=0 0&0=0,
2020-07-11 21:41:36 184
原创 CPP之剑指 Offer 66. 构建乘积数组
题目描述:给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000题目分析:根据题目描述,函数名是constructArr,函数输入是vector& a,返回值应当是新的数组 vec
2020-07-11 21:31:07 217
原创 CPP之剑指 Offer 67. 把字符串转换成整数
题目描述:写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中
2020-07-11 21:13:26 578
原创 CPP之面试题68 - I. 二叉搜索树的最近公共祖先
题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题意分析:首先根据题目我们可以知道,我们解答这道题目需要完成的函数名可以为“最近公共祖先”的音译,即lowestCommonAncestor,其次函数的输入是一个二叉搜索树,以及树中的两个子节点。函数的返回值应当是一个满足“最近公共祖先”要求的数
2020-07-11 20:54:12 122
原创 CPP之面试题68 - II. 二叉树的最近公共祖先
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先。思路:1.在root的左子树和右子树同时找p和q,若p和q分别在root的左右子树,则root为所求.2.若左子树返回NULL,则说明p和q都在右子树,则进入右子树做1.3.若右子树返回NULL,则说明p和q都在左子树,则进入左子树左1.解答:/*
2020-07-11 20:08:37 128
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人