滤波问题汇总

1。A:JM86里面,GetStrength这个函数中下面这个数组有什么作用呢??
byte BLK_NUM[2][4][4]   = {{{0,4,8,12},{1,5,9,13},{2,6,10,14},{3,7,11,15}},{{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}} ;
blk_y   = (mb_y<<2) + (blkQ >> 2) ;
blk_x   = (mb_x<<2) + (blkQ   & 3) ;

这是计算子块的坐标的么,mb_y为什么有乘以4呢?还有就是blkQ >> 2和blkQ   & 3起什么作用??

答:把 BLK_NUM[2][4][4] 前面四个一维数组和后面四个一维数组分别写成矩阵形式:

0   4   8 12                                   0 1 2 3
1   5   9 13                                   4 5 6 7
2   6   10 14                                   8 9 10 11
3   7   11 15                                   12 13 14   15

观察一下特点。再联想一下滤波的顺序——首先是垂直边界从左到右,然后是水平边界从上到下。可以推断:第一矩阵就是用来标志边界滤波强度每个 4*4 块的垂直边界的计算顺序,第二个矩阵就是用来标志边界滤波强度每个 4*4 块的水平边界的计算顺序

宏块坐标乘 4 表示什么呢?首先我们想一下,什么东西的坐标与宏块坐标存在 4 倍关系?是的,每个宏块的第一个 4*4 块的坐标与宏块坐标存在 4 倍关系,那么宏块坐标乘 4 当然就是表示得到每个宏块的第一个 4*4 块的坐标了。后面再进行一些 “+” 的操作得到的数值可能就应该是宏块内某个 4*4 块的坐标了(以整幅图像左上角为原点)。

至于 blkQ >> 2和 blkQ   & 3起什么作用,这个当然首先要看 blkQ 是什么意思了。然后把 blkQ 可能出现的值全部进行 &3 操作,一个个列在纸上,看看有什么特点。然后再推断,验证。


A:void DeblockMb(ImageParameters *img, byte **imgY, byte ***imgUV, int mb_y, int mb_x)
{
   int           EdgeCondition;
   int           dir, edge, QP ;        各个参数的定义?            

 

dir=0: vertical edges; dir=1: horicontal edges

EdgeCondition:考虑左宏块或上宏块是否可用

edge:就是 滤波的时候的横向的4条或纵向的4条

A:MbP = (edge)? MbQ : ((dir)? (MbQ -(img->width>>4))   : (MbQ-1) ) ; 这一句怎么理解

非MBAFF模式下:
对于第0条边,垂直情况取左相邻MB的QP,所以MbQ-1;水平情况取上相邻QP,所以是MbQ -(img->width>>4),当前MB地址减一行的MB数,就是上相邻MB地址。
对于其他边,QP就取当前MB的

A;请教达人,在x264编码实现的过程中,有没有实现环内去块滤波,看了很久的源码也没有发现有这部分功能的实现,另外其运动估计部分是1/4像素运动估计么?

 

多谢提示,刚刚在源码中找到了关于环形滤波的部分,原来在编码完成后,参考帧的更新中有deblocking filter  
/* ---------------------- Update encoder state ------------------------- */
/* update rc */
x264_cpu_restore( h->param.cpu );
x264_ratecontrol_end( h, i_frame_size * 8 );
/* handle references */
if( i_nal_ref_idc != NAL_PRIORITY_DISPOSABLE )
      x264_reference_update( h );
#ifdef DEBUG_DUMP_FRAME
else
       x264_fdec_deblock( h );
#endif
x264_frame_put( h->frames.unused, h->fenc );

 我想知道,一个frame图象结构里已经有plane保存数据了,为什么还要有filtered啊。搞的头大死了,尤其在看帧间预测的时候,希望大家帮下忙,谢谢。原来是放半像素插值的,呵呵,终于弄懂了。

为什么在x264的编码里面不对B帧进行滤波呢?就因为B帧不作为参考帧吗?可还是要输出的啊,不解,希望大家帮下忙,谢谢.

因为你在做开发的时候才需要输出编码端的重构图像作参考。实际应用中,谁会把编码的重构图像输出呢?输出又有什么用呢?

if (p->MbaffFrameFlag && mb_y==16 && MbQ->mb_field)
filterTopMbEdgeFlag = 0;
这个判断是针对域宏块对来说的么?为什么mb_y要等于16而不是0呢?

对照标准 8.7 小节中变量 filterTopMbEdgeFlag 的推倒过程去理解。标准规定了 filterTopMbEdgeFlag = 0 有 5 种情况,自己去对照一下看该段代码的功能与哪种情况比较吻合。
我在查阅了标准,他是这样解释的:
If any of the following conditions is true, the variable filterTopMbEdgeFlag is set equal to 0.
–        MbaffFrameFlag is equal to 0 and CurrMbAddr is less than PicWidthInMbs.
–        MbaffFrameFlag is equal to 1, ( CurrMbAddr >> 1 ) is less than PicWidthInMbs, and the macroblock CurrMbAddr is a field macroblock.
–        MbaffFrameFlag is equal to 1, ( CurrMbAddr >> 1 ) is less than PicWidthInMbs, the macroblock CurrMbAddr is a frame macroblock, and CurrMbAddr % 2 is equal to 0.
–        disable_deblocking_filter_idc for the slice that contains the macroblock CurrMbAddr is equal to 1
–        disable_deblocking_filter_idc for the slice that contains the macroblock CurrMbAddr is equal to 2 and the macroblock mbAddrB is not available    就是第二条

看了城里汉子的帖子,并且在编码端找到了
static const int   b8_mode_table[6]   = {0, 4, 5, 6, 7};       // DO NOT CHANGE ORDER !!!
static const int   mb_mode_table[7]   = {0, 1, 2, 3, P8x8, I16MB, I4MB}; // DO NOT CHANGE ORDER !!!

疑问一:b8_mode_table只有5个元素,为什么这边数组长度定义了6?

疑问二:在解码端ercWriteMBMODEandMV()函数中,有这样的判断
pRegion->regionMode = (currMB->mb_type   ==I16MB   ? REGMODE_INTRA    :
                     currMB->b8mode==IBLOCK ? REGMODE_INTRA_8x8   :
                   currMB->b8mode
==0    ? REGMODE_INTER_COPY :
                   currMB->b8mode==1    ? REGMODE_INTER_PRED : REGMODE_INTER_PRED_8x8);


显然这边的currMB->b8mode值应该是在mb_mode_table[7]中,但是城里汉子说b8Mode划分定在表格b8_mode_table中?

疑问三:能不能解释下mb_mode_table[7]各个值的意义,我不太明白?

疑问四:currMB->mb_type的取值是划分定在表格mb_mode_table[7]中的吗?

1、b8_mode_table只用了5个元素。第6个空间一直没用到,程序员的问题
2、保存宏块模式mb_type时,都是以8*8为单位。比如16*16编码,那么其4个8*8块的模式都记录为1。但不代表1就应该是b8_mode_table中的值。如果是p8*8模式,就要分别其4个8*8的具体模式(b8_mode_table中的一种),
3、分别是direct 8*8,8*8,8*4,4*8,4*4模式
4、见2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis基本类型和使用

redis存储数据的基本类型有&#xff1a;string&#xff08;字符串类型&#xff09;、hash&#xff08;散列类型&#xff09;、list&#xff08;列表类型&#xff09;、set&#xff08;集合类型&#xff09;、zset&#xff08;有序集合类型&#xff09;。 依次做一些练习。redis…

Python与MySQL数据库连接

Python3 MySQL 数据库连接 MySQL 可应用于多种语言&#xff0c;包括 PERL, C, C, JAVA 和 PHP 什么是 PyMySQL&#xff1f; PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库&#xff0c;Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范&a…

mysql 日志_MySQL日志系统

MySQL日志系统MySQL有两个重要的日志系统&#xff0c;分别是 redo log (重做日志) 和 bin log (归档日志) 。这两种日志有以下三点不同。redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 层实现的&#xff0c;所有引擎都可以使用。redo log 是物理日志&am…

盛大游戏杯第十五届上海大学程序设计联赛暨上海金马五校赛

编程1小时&#xff0c;提交4小时 做这种比赛一定要选一个好OJ啊 黑白图像直方图 发布时间: 2017年7月8日 21:00 最后更新: 2017年7月8日 22:38 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上&#xff0c;每个像素点或者是黑色的或者是白色的。黑色像素点…

对几个重要问题的阐述

由于DPB中间的参考帧的MV都是以4X4块为单位&#xff0c;现在以8X8块作Direct mode模式&#xff0c;所以必须对子块的MV作合并&#xff0c; JM采用的东西是如下图的方式: x o | o x o o | o o - - - - - o o | o o x o | o x 每8X8块取外角上的4X4块的MV. 算法如下: <<<…

【MySQL】基于Docker的Mysql主从复制搭建

基于Docker的Mysql主从复制搭建 为什么基于Docker搭建&#xff1f; 资源有限 虚拟机搭建对机器配置有要求&#xff0c;并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相互独立&#xff0c;有独立ip&#xff0c;互不冲突 Docker使用步骤简便&#xf…

Web开发介绍

Web开发介绍 一,认识一个网站 最早的软件都是运行在大型机上的&#xff0c;软件使用者通过“哑终端”登陆到大型机上去运行软件。 后来随着PC机的兴起&#xff0c;软件开始主要运行在桌面上&#xff0c;而数据库这样的软件运行在服务器端&#xff0c;这种Client/Server模式简…

python云端系统开发入门_Python云端系统开发入门

第01课 初识Django 课时1Django框架介绍 00 : 14 : 33 开始学习 课时2工程搭建1 00 : 28 : 50 开始学习 课时3工程搭建2 00 : 13 : 22 开始学习 第02课 请求和响应的处理 课时1获取请求url的参数 00 : 07 : 57 开始学习 课时2获取请求url的查询字符串 00 : 12 : 01 开始学习 课…

IBM 安全部门 CTO:AI 必须被重新定义为“增强智能”

编者按&#xff1a;随着人工智能的发展&#xff0c;人们对它逐渐有误会、恐惧之心。如果能够利用好人工智能&#xff0c;特别是在网络安全领域&#xff0c;它将成为人类对抗网络犯罪强有力的武器。IBM 安全部门的 CTO Sandy Bird 认为现在的人工智能应该被重新定义为“增强智能…

【Nginx】通过反向代理配置本地图床功能

安装nginx sudo apt-get install nginx配置nginx.conf sudo vim /etc/nginx/nginx.conf worker_processes auto; pid /run/nginx.pid;events {worker_connections 768;# multi_accept on; }http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash…

构建之法第二章

单元测试&#xff1a;一个开发人员要面对测试一个单元时只给出单元的代码而没有规格说明这样吃力不讨好的任务.你怎样做才会有更多的收获,而不仅仅是发现编译器的Bug?第一步是理解这个单元原本要做什么, --- 不是它实际上做了什么. 比较有效的方法是倒推出一个概要的规格说明.…

帧内预测模式提取

if (input->rdopt) { int mb_available_up; int mb_available_left; int mb_available_up_left; min_rdcost max_rdcost; // precompute all new chroma intra prediction modes // 对色度进行帧内预测 IntraChromaPredict…

Django简介以及安装

Django简介 1. 认识Django Django是一个高级的Python Web框架&#xff0c;它鼓励快速开发和清洁&#xff0c;务实的设计。由经验丰富的开发人员构建&#xff0c;它负责Web开发的许多麻烦&#xff0c;因此您可以专注于编写应用程序&#xff0c;而无需重新创建轮子。它是免费的…

python基础笔试面试题_python基础面试常见题

Python是目前市面上&#xff0c;我个人认为是最简洁、最优雅、最有前途、最全能的编程语言&#xff0c;没有之一。 2、通过什么途径学习的Python&#xff1f; 通过自学&#xff0c;包括网上查看一些视频&#xff0c;购买一些相关专业的书籍。 3、Python和Java、PHP、C、C#、C等…

django-rest-swagger显示接口备注内容

Swagger是一個API開發者的工具框架&#xff0c;用於生成、描述、調用和可視化RESTful風格的Web服務。總體目標是使客戶端和文件系統服務器以同樣的速度來更新&#xff0c;方法&#xff0c;參數和模型緊密集成到服務器端的代碼中&#xff0c;允許API始終保持同步。 在使用 djan…

安全和连接是IoT联网设备2大挑战

IoT正在推动500亿个联网设备在未来10年内从工业、零售、智能照明、智慧城市、汽车、农业、可穿戴设备、智能建筑、医疗市场涌现出来&#xff0c;ARM处理器部门市场营销总监Ian Smythe表示&#xff1a;“到2020年&#xff0c;消费电子和健康、智慧城市和物流、汽车和运输领域的I…

windows下部署免费ssl证书(letsencrypt)

随着网络的发展&#xff0c;网络安全也越来越重要&#xff0c;对于网站来说&#xff0c;从Http升级到https也是我们要做的首要事情。要实现https&#xff0c;首先我们需要申请一张SSL证书&#xff0c;这篇文章我主要介绍下边这几个方面&#xff1a; 1. SSL简单介绍 2. 免费Lete…

Django之URLconf路由

URLconf路由 一个干净优雅的URL方案是高质量Web应用程序中的一个重要细节。 Django可以让你设计URL&#xff0c;无论你想要什么&#xff0c;没有框架限制。 要为应用程序设计URL&#xff0c;您可以非正式地创建一个名为URLconf&#xff08;URL配置&#xff09;的Python模块。…

python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法

一般情况下&#xff0c;在调用函数时&#xff0c;使用的是位置参数&#xff0c;即是按照参数的位置来传值&#xff1b;关键字参数是按照定义函数传入的参数名称来传值的。那么&#xff0c;关键字参数怎么使用&#xff1f;工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 打…

HTML块级元素

在HTML5出现之前&#xff0c;人们一般把元素分为块级、内联和内联块元素。本文将详细介绍HTML块级元素h标题(Heading)元素有六个不同的级别&#xff0c;<h1>是最高级的&#xff0c;而<h6>则是最低的。一个标题元素能简要描述该节的主题从<h1>到<h6>&am…