JP2023511206A - 適応ループフィルタリングのためのエンコーダ、デコーダ、および対応する方法 - Google Patents

適応ループフィルタリングのためのエンコーダ、デコーダ、および対応する方法 Download PDF

Info

Publication number
JP2023511206A
JP2023511206A JP2022544809A JP2022544809A JP2023511206A JP 2023511206 A JP2023511206 A JP 2023511206A JP 2022544809 A JP2022544809 A JP 2022544809A JP 2022544809 A JP2022544809 A JP 2022544809A JP 2023511206 A JP2023511206 A JP 2023511206A
Authority
JP
Japan
Prior art keywords
block
sample
picture
samples
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022544809A
Other languages
English (en)
Inventor
アナンド・メヘル・コトラ
セミフ・エセンリク
ハン・ガオ
ビャオ・ワン
エレナ・アレクサンドロブナ・アルシナ
Original Assignee
ホアウェイ・テクノロジーズ・カンパニー・リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ホアウェイ・テクノロジーズ・カンパニー・リミテッド filed Critical ホアウェイ・テクノロジーズ・カンパニー・リミテッド
Publication of JP2023511206A publication Critical patent/JP2023511206A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/86Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

ピクチャのサンプル値をフィルタリングする方法およびビデオデコード装置が開示されており、この方法は、ピクチャのブロックに対する再構成済みサンプル値を取得することと、ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得することと、フィルタ係数およびブロックに対する再構成済みサンプル値に従って総和値を取得することと、ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得することと、丸められた総和値に従ってブロックに対するフィルタ再構成済みサンプル値を取得することとを含む。

Description

関連出願の相互参照
本特許出願は、2020年1月24日に出願したPCT出願第PCT/EP2020/051788号に対する優先権を主張するものである。前述の特許出願の開示は、全体が参照により本明細書に組み込まれる。
本出願(開示)の実施形態は、一般的に、画像処理の分野に関係し、より詳細には、適応ループフィルタリング(adaptive loop filtering)の分野に関係する。
ビデオコーディング(ビデオのエンコード(encoding)およびデコード(decoding))は、広範なデジタルビデオアプリケーション、たとえば、放送デジタルテレビ、インターネットおよびモバイルネットワーク上のビデオ伝送、ビデオチャット、ビデオ会議などのリアルタイム会話アプリケーション、DVDおよびブルーレイディスク、ビデオコンテンツ収集および編集システム、ならびにセキュリティアプリケーションのカムコーダーにおいて使用されている。
比較的短いビデオであっても描画するために必要なビデオデータの量は実質的に大量になり得、その結果、データがストリーミングされるか、または帯域幅容量が限られている通信ネットワークを介した他の何らか方法で伝達されるときに面倒なことが生じ得る。したがって、今日の電気通信ネットワークでは、ビデオデータは、伝達される前に圧縮されるのが一般的である。ビデオのサイズも、メモリリソースが限られていることもあり得るのでビデオがストレージデバイスに記憶されるときに問題になる可能性がある。ビデオ圧縮デバイスは、伝送元でソフトウェアおよび/またはハードウェアを使用して伝送または記憶の前にビデオデータをコーディングし、それによってデジタルビデオイメージを表現するために必要なデータ量を削減することが多い。次いで、圧縮されたデータは、ビデオデータをデコードするビデオ伸張デバイスによって伝送先に受信される。ネットワークリソースに限度があり、求められる映像品質が高まる一方であることから、画質をほとんどまたはまったく犠牲にすることなく圧縮率を改善する圧縮および伸張技術の改善が望ましい。
本出願の実施形態は、独立請求項によるエンコードおよびデコードのための装置および方法を提供する。
前述の、および他の目的は、独立請求項の主題によって達成される。さらなる実装形態は、従属請求項、説明、および図から明らかである。
特定の実施形態は付属の独立請求項において概説されており、他の実施形態は従属請求項において説明されている。
本発明の第1の態様は、ピクチャのサンプル値をフィルタリングする方法を提供し、この方法は、ピクチャのブロックに対する再構成済みサンプル値を取得することと、ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得することと、フィルタ係数およびブロックに対する再構成済みサンプル値に従って総和値を取得することと、ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得することと、丸められた総和値に従ってブロックに対するフィルタ再構成済みサンプル値を取得することとを含む。
本発明の実施形態によれば、ALFフィルタリングプロセスにおける右シフト値に対応する丸め値が使用される。この解決策は、他のフィルタリング段階と比較されたときにALFフィルタリングが正確で一貫しているという利点をもたらす。
一実装形態において、丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは総和値であり、alfShiftYはサンプルの垂直位置に基づき決定される変数である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たすときに、alfShiftYは10に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たさないときに、alfShiftYは7に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、yが0に等しいときに、alfShiftYは10に等しい。
一実装形態において、yが0に等しくないときに、alfShiftYは7に等しい。
一実装形態において、ブロック内のサンプルの垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である。
一実装形態において、丸めプロセスは、加えられた総和値を取得するために垂直位置に基づき決定された値を総和値に加えることと、垂直位置に基づき加えられた総和値をシフトすることとを含む。
一実装形態において、丸められた総和値に従ってブロックに対するフィルタ再構成済みサンプル値を取得することは、丸められた総和値およびブロックに対する再構成済みサンプル値に従ってブロックに対するフィルタ再構成済みサンプル値を取得することを含む。
一実装形態において、ブロックは、コーディングツリーブロックである。
本発明の第2の態様は、ビデオデコード装置を提供し、装置は、ピクチャのブロックに対する再構成済みサンプル値を取得するように構成されている、再構成モジュールと、ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得するように構成されている、解析モジュールと、フィルタ係数およびブロックに対する再構成済みサンプル値に従って総和値を取得するように構成されている、計算モジュールと、ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得するように構成されている、丸めモジュールと、丸められた総和値に従ってブロックに対するフィルタ再構成済みサンプル値を取得するように構成されている、フィルタリングモジュールとを備える。
本発明の実施形態によれば、ALFフィルタリングプロセスにおける右シフト値に対応する丸め値が使用される。この解決策は、他のフィルタリング段階と比較されたときにALFフィルタリングが正確で一貫しているという利点をもたらす。
一実装形態において、丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは総和値であり、alfShiftYはサンプルの垂直位置に基づき決定される変数である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たすときに、alfShiftYは10に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たさないときに、alfShiftYは7に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、yが0に等しいときに、alfShiftYは10に等しい。
一実装形態において、yが0に等しくないときに、alfShiftYは7に等しい。
一実装形態において、ブロック内のサンプルの垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である。
一実装形態において、丸めモジュールは、加えられた総和値を取得するために垂直位置に基づき決定される値を総和値に加算し、垂直位置に基づき加えられた総和値をシフトして、丸められた総和値を取得するように構成される。
本発明の第3の態様は、第1の態様による方法および第1の態様の実装形態のいずれか1つを実行するための処理回路を備えるデコーダを提供する。
本発明の第4の態様は、コンピュータまたはプロセッサ上で実行されたときに、第1の態様、第3の態様、および第1の態様、第3の態様の実装形態のいずれか1つによる方法を実行するためのプログラムコードを含むコンピュータプログラム製品を提供する。
本発明の第5の態様は、デコーダを提供し、これは、1つまたは複数のプロセッサと、プロセッサに結合された、プロセッサによる実行のためのプログラミングを記憶する、非一時的コンピュータ可読記憶媒体であって、プログラミングは、プロセッサによって実行されたときに、第1の態様、第3の態様のいずれか1つおよび第1の態様、第3の態様の実装形態のいずれか1つに従って方法を実行するようにデコーダを構成する、非一時的コンピュータ可読記憶媒体とを備える。
本発明の第6の態様は、コンピュータデバイスによって実行されたときに、コンピュータデバイスに、第1の態様、第3の態様のいずれか1つおよび第1の態様、第3の態様の実装形態のいずれか1つに従って方法を実行させるプログラムコードを収める非一時的コンピュータ可読媒体を提供する。
本発明の第7の態様は、上記の実施形態のいずれか1つの方法によってエンコード/デコードされたビットストリームを含む非一時的な記憶媒体を提供する。
本発明の第8の態様は、複数のシンタックス要素を含めることによってビデオ信号のエンコード済みビットストリームを提供し、複数のシンタックス要素は、少なくともシンタックス要素の値に基づき条件付きで信号により伝えられる、クロマ成分に対するデブロッキング制御パラメータを含み、シンタックス要素の値は、コーディング済みピクチャのスライスのクロマ成分に対するデブロッキング制御パラメータに関係する。
本発明の第1の態様による方法は、本発明の第2の態様による装置によって実行できる。本発明の第1の態様による方法のさらなる特徴および実装形態は、本発明の第2の態様による装置の特徴および実装の形態に対応する。
1つまたは複数の実施形態の詳細は、添付図面および以下の説明において述べられる。他の特徴、目的、および利点は、説明と、図面と、請求項とから明らかになるであろう。
本発明の第9の態様は、ピクチャのサンプル値をフィルタリングする方法を提供し、この方法は、ピクチャのブロックに対するサンプル値を取得することと、適応ループフィルタリングに対するフィルタ係数を取得することと、フィルタ係数およびブロックに対するサンプル値に従って総和値を取得することと、ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得することと、丸められた総和値に従ってブロックに対するフィルタサンプル値を取得することと、ブロックに対するフィルタサンプル値をエンコードしてビットストリームを取得することとを含む。
本発明の実施形態によれば、ALFフィルタリングプロセスにおける右シフト値に対応する丸め値が使用される。この解決策は、他のフィルタリング段階と比較されたときにALFフィルタリングが正確で一貫しているという利点をもたらす。
一実装形態において、丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは総和値であり、alfShiftYはサンプルの垂直位置に基づき決定される変数である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たすときに、alfShiftYは10に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たさないときに、alfShiftYは7に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、yが0に等しいときに、alfShiftYは10に等しい。
一実装形態において、yが0に等しくないときに、alfShiftYは7に等しい。
一実装形態において、ブロック内のサンプルの垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である。
一実装形態において、丸めプロセスは、加えられた総和値を取得するために垂直位置に基づき決定された値を総和値に加えることと、垂直位置に基づき加えられた総和値をシフトすることとを含む。
一実装形態において、丸められた総和値に従ってブロックに対するフィルタサンプル値を取得することは、丸められた総和値およびブロックに対するサンプル値に従ってブロックに対するフィルタサンプル値を取得することを含む。
一実装形態において、ブロックは、コーディングツリーブロックである。
本発明の第10の態様は、ビデオエンコード装置を提供し、装置は、ピクチャのブロックに対するサンプル値を取得するように構成されている、取得モジュールであって、適応ループフィルタリングに対するフィルタ係数を取得するように構成されている、取得モジュールと、フィルタ係数およびブロックに対するサンプル値に従って総和値を取得するように構成されている、計算モジュールと、ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得するように構成されている、丸めモジュールと、丸められた総和値に従ってブロックに対するフィルタサンプル値を取得するように構成されている、フィルタリングモジュールと、フィルタサンプル値をエンコードしてビットストリームを取得するように構成されている、ビットストリーム生成モジュールとを備える。
本発明の実施形態によれば、ALFフィルタリングプロセスにおける右シフト値に対応する丸め値が使用される。この解決策は、他のフィルタリング段階と比較されたときにALFフィルタリングが正確で一貫しているという利点をもたらす。
一実装形態において、丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは総和値であり、alfShiftYはサンプルの垂直位置に基づき決定される変数である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たすときに、alfShiftYは10に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、サンプルの垂直位置が以下の条件のいずれか1つを満たさないときに、alfShiftYは7に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一実装形態において、yが0に等しいときに、alfShiftYは10に等しい。
一実装形態において、yが0に等しくないときに、alfShiftYは7に等しい。
一実装形態において、ブロック内のサンプルの垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である。
一実装形態において、丸めモジュールは、加えられた総和値を取得するために垂直位置に基づき決定される値を総和値に加算し、垂直位置に基づき加えられた総和値をシフトして、丸められた総和値を取得するように構成される。
本発明の第11の態様は、第9の態様による方法および第9の態様の実装形態のいずれか1つを実行するための処理回路を備えるエンコーダを提供する。
本発明の第12の態様は、コンピュータまたはプロセッサ上で実行されたときに、第9の態様、第3の態様、および第9の態様の実装形態のいずれか1つによる方法を実行するためのプログラムコードを含むコンピュータプログラム製品を提供する。
本発明の第13の態様は、エンコーダを提供し、これは、1つまたは複数のプロセッサと、プロセッサに結合された、プロセッサによる実行のためのプログラミングを記憶する、非一時的コンピュータ可読記憶媒体であって、プログラミングは、プロセッサによって実行されたときに、第9の態様、第3の態様のいずれか1つおよび第9の態様の実装形態のいずれか1つに従って方法を実行するようにデコーダを構成する、非一時的コンピュータ可読記憶媒体とを備える。
本発明の第14の態様は、コンピュータデバイスによって実行されたときに、コンピュータデバイスに、第9の態様のいずれか1つおよび第9の態様の実装形態のいずれか1つに従って方法を実行させるプログラムコードを収める非一時的コンピュータ可読媒体を提供する。
本発明の第15の態様は、上記の実施形態のいずれか1つの方法によってエンコード/デコードされたビットストリームを含む非一時的な記憶媒体を提供する。
以下では、本発明の実施形態が添付されている図および図面を参照しつつより詳細に説明される。
本発明の実施形態を実装するように構成されているビデオコーディングシステムの一例を示すブロック図である。 本発明の実施形態を実装するように構成されているビデオコーディングシステムの別の例を示すブロック図である。 本発明の実施形態を実装するように構成されているビデオエンコーダの一例を示すブロック図である。 本発明の実施形態を実装するように構成されているビデオデコーダの例示的な一構造を示すブロック図である。 エンコード装置またはデコード装置の一例を例示するブロック図である。 エンコード装置またはデコード装置の別の例を例示するブロック図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 本発明の実施形態の例を例示する概略図である。 コンテンツ配信サービスを実現するコンテンツ供給システム3100の例示的な一構造を示すブロック図である。 端末デバイスの一例の構造を示すブロック図である。 本発明による方法実施形態を示すフローチャートである。 本発明による装置実施形態を示すブロック図である。
次の説明では、同一の参照記号は、明示的にそうでないことが指定されていない場合に同一の、または少なくとも機能的に同等の特徴を指す。
次の説明では、本開示の一部を成し、例示により、本発明の実施形態の特定の態様または本発明の実施形態が使用され得る特定の態様を図示する添付図が参照されている。本発明の実施形態は、他の態様で使用されてもよく、図には描かれていない構造的または論理的変更を含み得ることは理解される。したがって、次の詳細な説明は限定的な意味で解釈されるべきでなく、本発明の範囲は付属の請求項により定められる。
たとえば、説明されている方法に関連する開示は、その方法を実行するように構成されている対応するデバイスまたはシステムにも当てはまることがあり、またその逆も当てはまることが理解される。たとえば、1つもしくは複数の特定の方法ステップが説明されている場合、対応するデバイスが、説明されている1つもしくは複数の方法ステップを実行するために、1つもしくは複数のユニット、たとえば、機能ユニット(たとえば、1つもしくは複数のステップを実行する1つのユニット、または複数のステップのうちの1つもしくは複数のステップを各々実行する複数のユニット)を、そのような1つもしくは複数のユニットが図に明示的に説明もしくは例示されていないとしても、備え得る。その一方で、たとえば、特定の装置が、1つもしくは複数のユニット、たとえば、機能ユニットに基づき説明されている場合、対応する方法は、1つもしくは複数のユニットの機能を実行する1つのステップ(たとえば、1つもしくは複数のユニットの機能を実行する1つのステップ、または複数のユニットのうちの1つもしくは複数のユニットの機能を各々実行する複数のステップ)を、そのような1つもしくは複数のステップが図に明示的に説明もしくは例示されていないとしも、含み得る。さらに、本明細書において説明されている様々な例示的な実施形態および/または態様の特徴は、特に断りのない限り、互いに組み合わされ得ることは理解される。
ビデオコーディングは、典型的には、ビデオまたはビデオシーケンスを形成する、ピクチャのシーケンスの処理を指す。ビデオ符号化の分野では、「ピクチャ」という用語の代わりに、「フレーム」または「画像」という用語が同義語として使用され得る。ビデオコーディング(または一般にコーディング)は、ビデオエンコードおよびビデオデコードの2つの部分を含む。ビデオエンコードは、ソース側で実行され、典型的には、元のビデオピクチャを処理して(たとえば、圧縮によって)、ビデオピクチャを表現するために必要なデータの量を減らす(より効率的に記憶し、および/または伝送するために)ことを含む。ビデオデコードは、デスティネーション側で実行され、典型的には、ビデオピクチャを再構成するためにエンコーダと比較される逆処理を含む。ビデオピクチャ(または一般にピクチャ)の「コーディング」を参照する実施形態は、ビデオピクチャまたはそれぞれのビデオシーケンスの「エンコード」または「デコード」に関係すると理解されるものとする。エンコード部とデコード部との組合せは、CODEC(CodingおよびDecoding)とも称される。
可逆ビデオコーディングの場合、元のビデオピクチャは、再構成することができる、すなわち、再構成済みビデオピクチャは、元のビデオピクチャと同じ画質を有する(保存または伝送中の伝送損失または他のデータ損失がないと仮定する)。不可逆ビデオコーディングの場合、ビデオピクチャを表すデータ量を減少させるために、さらなる圧縮が、たとえば量子化によって実行されるが、これはデコーダ側で完全には再構成できない、すなわち、再構成済みビデオピクチャの画質は、元のビデオピクチャの画質と比較して低い、または悪い。
いくつかのビデオコーディング標準は、「不可逆ハイブリッドビデオコーデック」(すなわち、サンプル領域における空間および時間予測と、変換領域において量子化を適用するための2D変換コーディングとを組み合わせる)のグループに属する。ビデオシーケンスの各ピクチャは、典型的には、重なり合わないブロックのセットにパーティション分割され、コーディングは、典型的には、ブロックレベルで実行される。言い換えると、エンコーダにおいて、ビデオは、典型的には、ブロック(ビデオブロック)レベルで処理される、すなわちエンコードされるが、これは、たとえば、空間(イントラピクチャ)予測および/または時間(インターピクチャ)予測を使用して予測ブロックを生成すること、予測ブロックを現在のブロック(現在処理されている/処理されるべきブロック)から減算して残差ブロックを取得すること、残差ブロックを変換すること、および変換領域内で残差ブロックを量子化して伝送されるべきデータの量を低減する(圧縮する)ことによって行われ、その一方で、デコーダ側では、エンコーダと比較される逆処理がエンコード済みブロックまたは圧縮済みブロックに適用され、表現のために現在のブロックを再構成する。さらに、エンコーダは、後続のブロックを処理する、すなわちコーディングするための同一の予測(たとえば、フレーム内予測およびフレーム間予測)および/または再構成を両方とも生成するようにデコーダ処理ループを複製する。
ビデオコーディングシステム10の次の実施形態において、ビデオエンコーダ20およびビデオデコーダ30が図1から図3に基づき説明される。
図1Aは、本出願の技術を利用し得る例示的なコーディングシステム10、たとえば、ビデオコーディングシステム10(または省略形のコーディングシステム10)を例示する概略ブロック図である。ビデオコーディングシステム10のビデオエンコーダ20(または省略形のエンコーダ20)およびビデオデコーダ30(または省略形のデコーダ30)は、本出願において説明されている様々な例による技術を実行するように構成され得るデバイスの例を表している。
図1Aに示されているように、コーディングシステム10は、エンコード済みピクチャデータ21を、たとえば、エンコード済みピクチャデータ13をデコードするためのデスティネーションデバイス14に提供するように構成されているソースデバイス12を備える。
ソースデバイス12は、エンコーダ20を備え、それに加えて、すなわち任意選択で、ピクチャソース16と、プリプロセッサ(または前処理ユニット)18、たとえばピクチャプリプロセッサ18と、通信インターフェースまたは通信ユニット22とを備え得る。
ピクチャソース16は、任意の種類のピクチャキャプチャデバイス、たとえば実世界のピクチャをキャプチャするためのカメラ、および/または任意の種類のピクチャ生成デバイス、たとえばコンピュータアニメーションピクチャを生成するためのコンピュータグラフィックスプロセッサ、または実世界のピクチャ、コンピュータ生成ピクチャ(たとえば、スクリーンコンテンツ、仮想現実(VR)ピクチャ)および/またはこれらの任意の組合せ(たとえば、拡張現実(AR)ピクチャ)を取得し、および/または提供するための任意の種類の他のデバイスを含むか、またはそれらであってもよい。ピクチャソースは、前述のピクチャのいずれかを記憶する任意の種類のメモリまたはストレージであってよい。
プリプロセッサ18および前処理ユニット18によって実行される処理と区別して、ピクチャまたはピクチャデータ17は、生のピクチャまたは生のピクチャデータ17とも称され得る。
プリプロセッサ18は、(生の)ピクチャデータ17を受信し、ピクチャデータ17に対して前処理を実行して、前処理済みピクチャ19または前処理済みピクチャデータ19を取得するように構成される。プリプロセッサ18によって実行される前処理は、たとえば、トリミング、色形式変換(たとえば、RGBからYCbCrへ)、色補正、またはノイズ除去を含み得る。前処理ユニット18は、任意選択のコンポーネントであり得ることは理解できる。
ビデオエンコーダ20は、前処理済みピクチャデータ19を受信し、エンコード済みピクチャデータ21を提供するように構成される(さらなる詳細は、たとえば、図2に基づき後述する)。
ソースデバイス12の通信インターフェース22は、エンコード済みピクチャデータ21を受信し、エンコード済みピクチャデータ21(またはその任意のさらに処理されたバージョン)を通信チャネル13上で別のデバイス、たとえば、デスティネーションデバイス14または任意の他のデバイスに、保存または直接再構成のために送信するように構成され得る。
デスティネーションデバイス14は、デコーダ30(たとえば、ビデオデコーダ30)を備え、それに加えて、すなわち任意選択で、通信インターフェースまたは通信ユニット28、ポストプロセッサ32(または後処理ユニット32)、およびディスプレイデバイス34を備える。
デスティネーションデバイス14の通信インターフェース28は、たとえば、ソースデバイス12から直接的に、または任意の他のソース、たとえば、ストレージデバイス、たとえばエンコード済みピクチャデータストレージデバイスから、エンコード済みピクチャデータ21(またはその任意のさらに処理されたバージョン)を受信し、エンコード済みピクチャデータ21をデコーダ30に提供するように構成される。
通信インターフェース22および通信インターフェース28は、ソースデバイス12とデスティネーションデバイス14との間の直接通信リンク、たとえば、直接的な有線もしくはワイヤレス接続を介して、または任意の種類のネットワーク、たとえば、有線もしくはワイヤレスネットワークもしくはその任意の組合せ、または任意の種類のプライベートおよびパブリックネットワーク、またはその任意の組合せを介して、エンコード済みピクチャデータ21またはエンコード済みデータ13を伝送するか、または受信するように構成され得る。
通信インターフェース22は、たとえば、エンコード済みピクチャデータ21を適切な形式、たとえば、パケットにパッケージ化し、および/または、通信リンクまたは通信ネットワーク上で伝送するための任意の種類の伝送エンコードまたは処理を使用してエンコード済みピクチャデータを処理するように構成され得る。
通信インターフェース22の対を成す片方を形成する通信インターフェース28は、たとえば、伝送されたデータを受信し、任意の種類の対応する伝送デコードまたは処理および/または逆パッケージングを使用して伝送データを処理しエンコード済みピクチャデータ21を取得するように構成され得る。
通信インターフェース22および通信インターフェース28は両方とも、ソースデバイス12からデスティネーションデバイス14に向かう図1Aの通信チャネル13の矢印によって示されているような一方向通信インターフェースとして、または双方向通信インターフェースとして構成されてよく、たとえば、メッセージの送信および受信を行い、たとえば、接続をセットアップし、通信リンクおよび/またはデータ伝送、たとえば、エンコード済みピクチャデータ伝送に関係する任意の他の情報の確認応答および交換を行うように構成され得る。
デコーダ30は、エンコード済みピクチャデータ21を受信し、デコード済みピクチャデータ31またはデコード済みピクチャ31を提供するように構成される(さらなる詳細は、たとえば、図3または図5に基づき以下で説明される)。
デスティネーションデバイス14のポストプロセッサ32は、デコード済みピクチャデータ31(再構成済みピクチャデータとも呼ばれる)、たとえばデコード済みピクチャ31を後処理して、後処理済みピクチャデータ33、たとえば、後処理済みピクチャ33を取得するように構成される。後処理ユニット32によって実行される後処理は、たとえば、色形式変換(たとえば、YCbCrからRGBへ)、色補正、トリミング、もしくは再サンプリング、または、たとえば、ディスプレイデバイス34により表示するためにデコード済みピクチャデータ31を準備するための任意の他の処理を含み得る。
デスティネーションデバイス14のディスプレイデバイス34は、たとえば、ユーザまたは視聴者にピクチャを表示するために、後処理済みピクチャデータ33を受信するように構成される。ディスプレイデバイス34は、再構成済みピクチャを表現するための任意の種類のディスプレイ、たとえば、一体型もしくは外部ディスプレイもしくはモニタであるか、またはそれらを含んでいてもよい。ディスプレイは、たとえば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、プラズマディスプレイ、プロジェクター、マイクロLEDディスプレイ、液晶オンシリコン(LCoS)、デジタルライトプロセッサ(DLP)、または任意の種類の他のディスプレイを含み得る。
図1Aは、ソースデバイス12およびデスティネーションデバイス14を別々のデバイスとして描いているが、デバイスの実施形態は、両方または両方の機能性、ソースデバイス12または対応する機能性、およびデスティネーションデバイス14または対応する機能性を備えてもよい。そのような実施形態において、ソースデバイス12または対応する機能性およびデスティネーションデバイス14または対応する機能性は、同じハードウェアおよび/もしくはソフトウェア、別個のハードウェアおよび/もしくはソフトウェア、またはそれらの任意の組合せを使用して実装されてもよい。
説明に基づき当業者には明らかなように、異なるユニットの機能性の存在および(正確な)分割、または図1Aに示されているようなソースデバイス12および/またはデスティネーションデバイス14の機能性は、実際のデバイスおよびアプリケーションによって異なり得る。
エンコーダ20(たとえば、ビデオエンコーダ20)またはデコーダ30(たとえば、ビデオデコーダ30)またはエンコーダ20とデコーダ30の両方は、1つまたは複数のマイクロプロセッサ、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリートロジック、ハードウェア、ビデオコーディング専用装置、またはこれらの任意の組合せなどの、図1Bに示されているような処理回路を介して実装され得る。エンコーダ20は、図2のエンコーダ20に関して説明されているような様々なモジュール、および/または本明細書において説明されている任意の他のエンコーダシステムまたはサブシステムを具現化するために処理回路46を介して実装されてもよい。デコーダ30は、図3のデコーダ30に関して説明されているような様々なモジュール、および/または本明細書において説明されている任意の他のデコーダシステムまたはサブシステムを具現化するために処理回路46を介して実装されてもよい。処理回路は、後で説明されるような様々な動作を実行するように構成され得る。図5に示されているように、技術がソフトウェアで部分的に実装される場合、デバイスは、ソフトウェアのための命令を適切な非一時的コンピュータ可読記憶媒体に記憶し、本開示の技術を実行するために、1つまたは複数のプロセッサを使用してハードウェアで命令を実行し得る。ビデオエンコーダ20およびビデオデコーダ30のいずれかは、たとえば、図1Bに示されているように、単一のデバイスにおける組み合わされたエンコーダ/デコーダ(CODEC)の一部として一体化されてもよい。
ソースデバイス12およびデスティネーションデバイス14は、任意の種類のハンドヘルドもしくは据え置きデバイス、たとえば、ノートブックもしくはラップトップコンピュータ、携帯電話、スマートフォン、タブレットもしくはタブレットコンピュータ、カメラ、デスクトップコンピュータ、セットトップボックス、テレビ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲーム機、ビデオストリーミングデバイス(コンテンツサービスサーバまたはコンテンツ配信サーバなど)、放送受信機デバイス、放送送信機デバイス、または同様のものを含む、広範なデバイスのいずれかを含むものとしてよく、オペレーティングシステムをまったく使用しないか、または任意の種類のオペレーティングシステムを使用し得る。いくつかの場合において、ソースデバイス12およびデスティネーションデバイス14は、ワイヤレス通信のために装備されてよい。したがって、ソースデバイス12およびデスティネーションデバイス14は、ワイヤレス通信デバイスであってよい。
いくつかの場合において、図1Aに例示されているビデオコーディングシステム10は、単なる一例にすぎず、本出願の技術は、必ずしもエンコードデバイスとデコードデバイスとの間のデータ通信を含まないビデオコーディング設定(たとえば、ビデオエンコードまたはビデオデコード)に適用可能であるものとしてよい。他の例では、データは、ローカルメモリから取り出されるか、ネットワーク上でストリーミング配信されるか、または同様の処理がなされる。ビデオエンコードデバイスは、データをエンコードしてメモリに記憶し、および/またはビデオデコードデバイスは、メモリからデータを取り出してデコードするものとしてよい。いくつかの例では、エンコードとデコードとは、互いに通信しないが、単に、データをエンコードしてメモリに入れ、および/またはメモリからデータを取り出してデコードするデバイスによって実行される。
説明の便宜上、本発明の実施形態は、たとえば、High-Efficiency Video Coding(HEVC)を、またはITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)により開発された次世代のビデオコーディング規格である、Versatile Video coding(VVC)の参照ソフトウェアを、参照することで、本明細書において説明される。当業者であれば、本発明の実施形態がHEVCまたはVVCに限定されないことを理解するであろう。
エンコーダおよびエンコード方法
図2は、本出願の技術を実装するように構成されている例示的なビデオエンコーダ20の概略ブロック図を示している。図2の例では、ビデオエンコーダ20は、入力201(または入力インターフェース201)と、残差計算ユニット204と、変換処理ユニット206と、量子化ユニット208と、逆量子化ユニット210と、逆変換処理ユニット212と、再構成ユニット214と、ループフィルタユニット220と、デコード済みピクチャバッファ(DPB)230と、モード選択ユニット260と、エントロピーエンコードユニット270と、出力272(または出力インターフェース272)とを備える。モード選択ユニット260は、フレーム間予測ユニット244と、フレーム内予測ユニット254と、パーティション分割ユニット262とを備え得る。フレーム間予測ユニット244は、動き推定ユニットおよび動き補償ユニット(図示せず)を備え得る。図2に示されているようなビデオエンコーダ20は、また、ハイブリッドビデオエンコーダまたはハイブリッドビデオコーデックによるビデオエンコーダとも称され得る。
残差計算ユニット204、変換処理ユニット206、量子化ユニット208、モード選択ユニット260は、エンコーダ20の順方向信号経路を形成すると称されてもよく、その一方で、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、バッファ216、ループフィルタ220、デコード済みピクチャバッファ(DPB)230、フレーム間予測ユニット244、およびフレーム内予測ユニット254は、ビデオエンコーダ20の逆方向信号経路を形成すると称されてもよく、ビデオエンコーダ20の逆方向信号経路は、デコーダ(図3のビデオデコーダ30を参照)の信号経路に対応する。逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、ループフィルタ220、デコード済みピクチャバッファ(DPB)230、フレーム間予測ユニット244、およびフレーム内予測ユニット254は、ビデオエンコーダ20の「ビルトインデコーダ」を形成するとも称される。
ピクチャ&ピクチャパーティション分割(ピクチャ&ブロック)
エンコーダ20は、たとえば、入力201を介して、ピクチャ17(またはピクチャデータ17)、たとえば、ビデオまたはビデオシーケンスを形成するピクチャのシーケンスのピクチャを受信するように構成され得る。受信済みピクチャまたはピクチャデータは、前処理済みピクチャ19(または前処理済みピクチャデータ19)であってもよい。簡単のため、次の説明は、ピクチャ17を参照する。ピクチャ17は、現在のピクチャまたはコーディングされるべきピクチャとも称され得る(特に、ビデオコーディングでは現在のピクチャを他のピクチャ、たとえば同じビデオシーケンス、すなわち現在のピクチャも含んでいるビデオシーケンスの以前にエンコードされたおよび/またはデコードされたピクチャから区別するためである)。
(デジタル)ピクチャは、強度値を有するサンプルの2次元配列または行列であるか、そのようにみなされ得る。配列内のサンプルは、ピクセル(画素の省略形)またはペルとも称され得る。配列またはピクチャの水平方向および垂直方向(または軸)のサンプルの数は、ピクチャのサイズおよび/または解像度を定める。色の表現については、典型的には、3つの色成分が採用される、すなわち、ピクチャは、3つのサンプル配列として表現されるか、または3つのサンプル配列を含み得る。RBG形式または色空間において、ピクチャは、対応する赤色、緑色、および青色のサンプル配列を含む。しかしながら、ビデオコーディングにおいて、各ピクセルは、典型的には、輝度およびクロミナンス形式または色空間、たとえば、YCbCrで表され、これはYで示される(ときには代わりにLも使用される)輝度成分と、CbおよびCrで示される2つのクロミナンス成分とを含む。輝度(または省略形のルーマ)成分Yは、明るさまたはグレーレベル強度(たとえば、グレースケールピクチャの場合のような)を表し、2つのクロミナンス(または省略形のクロマ)成分CbおよびCrは色度または色情報成分を表す。したがって、YCbCr形式のピクチャは、輝度サンプル値(Y)の輝度サンプル配列と、クロミナンス値(CbおよびCr)の2つのクロミナンスサンプル配列とを含む。RGB形式のピクチャは、YCbCr形式に転換または変換され、その逆もあり得、このプロセスは、色変換または転換とも呼ばれる。ピクチャがモノクロである場合、ピクチャは輝度サンプル配列のみを含むものとしてよい。したがって、ピクチャは、たとえば、モノクロ形式のルーマサンプルの配列、または4:2:0、4:2:2、および4:4:4色空間形式のルーマサンプルの配列およびクロマサンプルの2つの対応する配列であり得る。
ビデオエンコーダ20の実施形態は、ピクチャ17を複数の(典型的には重なり合わない)ピクチャブロック203にパーティション分割するように構成されているピクチャパーティション分割ユニット(図2には示されていない)を含み得る。これらのブロックは、ルートブロック、マクロブロック(H.264/AVC)またはコーディングツリーブロック(CTB)もしくはコーディングツリーユニット(CTU)(H.265/HEVCおよびVVC)とも称され得る。ピクチャパーティション分割ユニットは、ビデオシーケンスのすべてのピクチャに対する同じブロックサイズ、およびそのブロックサイズを定義する対応するグリッドを使用するか、またはピクチャもしくはピクチャのサブセットもしくはグループ間でブロックサイズを変更し、各ピクチャを対応するブロックにパーティション分割するように構成され得る。
さらなる実施形態において、ビデオエンコーダは、ピクチャ17のブロック203、たとえば、ピクチャ17を形成する1つの、いくつかの、またはすべてのブロックを直接的に受信するように構成され得る。ピクチャブロック203は、現在のピクチャブロックまたはコーディングされるべきピクチャブロックとも称され得る。
ピクチャ17と同様に、ピクチャブロック203は、ここでもまた、強度値(サンプル値)を有するサンプルの2次元配列または行列であるか、またはそれとみなされ得るが、寸法はピクチャ17より小さい。言い換えると、ブロック203は、たとえば、1つのサンプル配列(たとえば、モノクロピクチャ17の場合にはルーマ配列、またはカラーピクチャの場合には1つのルーマもしくはクロマ配列)、または3つのサンプル配列(たとえば、カラーピクチャ17の場合にルーマおよび2つのクロマの配列)、または適用される色形式に応じた任意の他の数および/もしくは種類の配列を含み得る。ブロック203の水平方向および垂直方向(または軸)のサンプルの数は、ブロック203のサイズを定める。したがって、ブロックは、たとえば、サンプルのM×N(M列×N行)配列、または変換係数のM×N配列であるものとしてよい。
図2に示されているようなビデオエンコーダ20の実施形態は、ピクチャ17をブロック毎にエンコードするように構成されてよく、たとえば、エンコードおよび予測はブロック203毎に実行される。
残差計算
残差計算ユニット204は、たとえば、ピクチャブロック203のサンプル値から予測ブロック265のサンプル値をサンプル毎(ピクセル毎)に減算することによってピクチャブロック203および予測ブロック265(予測ブロック265についてのさらなる詳細は後で提示される)に基づき残差ブロック205(残差205とも称される)を計算し、サンプル領域内の残差ブロック205を取得するように構成され得る。
変換
変換処理ユニット206は、変換、たとえば離散コサイン変換(DCT)または離散サイン変換(DST)を、残差ブロック205のサンプル値に適用して、変換領域内の変換係数207を取得するように構成され得る。変換係数207は、変換残差係数とも称され、変換領域内の残差ブロック205を表し得る。
変換処理ユニット206は、H.265/HEVCについて指定されている変換などの、DCT/DSTの整数近似を適用するように構成され得る。直交DCT変換と比較して、そのような整数近似は、典型的には、特定の係数によってスケーリングされる。順方向変換および逆変換によって処理される残差ブロックのノルムを保つために、追加のスケーリング係数が変換プロセスの一部として適用される。スケーリング係数は、典型的には、スケーリング係数がシフト演算に対して2のべき乗であるというようないくつかの制約条件、変換係数のビット深度、および精度と実装コストとの間のトレードオフの関係に基づき選択される。たとえば、特定のスケーリング係数は、たとえば、逆変換処理ユニット212による逆変換(およびたとえばビデオデコーダ30における逆変換処理ユニット312による対応する逆変換)に対して指定され、たとえばエンコーダ20における変換処理ユニット206による順方向変換に対する対応するスケーリング係数は、しかるべく指定され得る。
ビデオエンコーダ20(それぞれ変換処理ユニット206)の実施形態は、たとえば、ビデオデコーダ30が変換パラメータを受信してデコードに使用し得るように、変換パラメータ、たとえば、1つの種類の1つもしくは複数の変換を、たとえば直接的にまたはエントロピーエンコードユニット270を介してエンコードまたは圧縮して出力するように構成され得る。
量子化
量子化ユニット208は、たとえば、スカラー量子化またはベクトル量子化を適用することによって、変換係数207を量子化し、量子化済み変換係数209を取得するように構成され得る。量子化済み変換係数209は、量子化済み変換係数209または量子化済み残差係数209とも称され得る。
量子化プロセスは、変換係数207のうちのいくつかまたはすべてに関連付けられているビット深度を低減し得る。たとえば、nビット変換係数は、量子化時に切り捨てでmビット変換係数に下げられるものとしてよく、ここで、nはmより大きい。量子化の程度は、量子化パラメータ(QP)を調整することによって変更され得る。たとえば、スカラー量子化については、より細かいまたはより粗い量子化を達成するために、異なるスケーリングが適用されてよい。より小さい量子化ステップサイズは、より細かい量子化に対応し、一方で、より大きい量子化ステップサイズは、より粗い量子化に対応する。適用可能な量子化ステップサイズは、量子化パラメータ(QP)によって示され得る。量子化パラメータは、たとえば、適用可能な量子化ステップサイズの事前定義されたセットへのインデックスであってもよい。たとえば、小さい量子化パラメータは、細かい量子化(小さい量子化ステップサイズ)に対応し、大きい量子化パラメータは、粗い量子化(大きい量子化ステップサイズ)に対応するものとしてよく、またはその逆であってもよい。量子化は、量子化ステップサイズによる除算を含み、たとえば、逆量子化ユニット210によって実行される、対応するおよび/または逆量子化解除は、量子化ステップサイズによる乗算を含み得る。いくつかの規格、たとえば、HEVCによる実施形態は、量子化ステップサイズを決定するために量子化パラメータを使用するように構成され得る。一般的に、量子化ステップサイズは、除算を含む式の不動点近似を使用して量子化パラメータに基づき計算され得る。量子化ステップサイズおよび量子化パラメータの方程式の固定点近似でスケーリングが使用されるので修正される可能性もある残差ブロックのノルムを復元するために、量子化および量子化解除に追加のスケーリング係数が導入されてよい。例示的な一実装形態において、逆変換のスケーリングと量子化解除が組み合わされることもあり得る。代替的に、カスタマイズされた量子化テーブルが使用され、たとえば、ビットストリーム内でエンコーダからデコーダに信号として送出され得る。量子化は、不可逆的演算であり、損失は、量子化ステップサイズの増大とともに増大する。
ビデオエンコーダ20(それぞれ量子化ユニット208)の実施形態は、たとえば、ビデオデコーダ30が量子化パラメータを受信してデコードに適用し得るように、量子化パラメータ(QP)を、たとえば直接的にまたはエントロピーエンコードユニット270を介してエンコードして出力するように構成され得る。
逆量子化
逆量子化ユニット210は、量子化ユニット208の逆量子化を量子化済み係数に適用して量子化解除済み係数211を取得することを、たとえば、量子化ユニット208と同じ量子化ステップサイズに基づき、または量子化ユニット208と同じ量子化ステップサイズを使用して量子化ユニット208によって適用される量子化方式の逆を適用することによって行うように構成される。量子化解除済み係数211は、量子化解除済み残差係数211とも称され、変換係数207に--典型的には量子化による損失により変換係数と同一ではないが--対応し得る。
逆変換
逆変換処理ユニット212は、変換処理ユニット206によって適用される変換の逆変換、たとえば、逆離散コサイン変換(DCT)または逆離散サイン変換(DST)または他の逆変換を適用して、サンプル領域内の再構成済み残差ブロック213(または対応する量子化解除済み係数213)を取得するように構成される。再構成済み残差ブロック213は、変換ブロック213とも称され得る。
再構成
再構成ユニット214(たとえば、加算器または総和器214)は、変換ブロック213(すなわち、再構成済み残差ブロック213)を予測ブロック265に加算してサンプル領域内の再構成済みブロック215を取得することを、たとえば、再構成済み残差ブロック213のサンプル値および予測ブロック265のサンプル値を--サンプル毎に--加算することによって行うように構成される。
フィルタリング
ループフィルタユニット220(または省略形の「ループフィルタ」220)は、再構成済みブロック215をフィルタリングしてフィルタリング済みブロック221を取得するか、または一般に、再構成済みサンプルをフィルタリングしてフィルタリング済みサンプルを取得するように構成される。ループフィルタユニットは、たとえば、ピクセル遷移を滑らかにするように構成され、またはそうでなければ、ビデオ画質を改善するように構成される。ループフィルタユニット220は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ、または1つもしくは複数の他のフィルタ、たとえば、双方向フィルタ、適応ループフィルタ(ALF)、鮮鋭化、平滑化フィルタもしくは協調フィルタ、またはそれらの任意の組合せなどの1つもしくは複数のループフィルタを含み得る。フィルタユニット220は、ループフィルタであるものとして図2に示されているが、他の構成では、ループフィルタユニット220は、ポストループフィルタとして実装されてもよい。フィルタリング済みブロック221は、フィルタリングされた再構成済みブロック221とも称され得る。
ビデオエンコーダ20(それぞれループフィルタユニット220)の実施形態は、たとえば、デコーダ30が同じループフィルタパラメータまたはそれぞれのループフィルタを受信してデコードに適用し得るように、ループフィルタパラメータ(サンプル適応オフセット情報などの)を、たとえば直接的にまたはエントロピーエンコードユニット270を介してエンコードして出力するように構成され得る。
デコード済みピクチャバッファ
デコード済みピクチャバッファ(DPB)230は、ビデオエンコーダ20によりビデオデータをエンコードするために、参照ピクチャ、または一般に参照ピクチャデータを記憶するメモリであってよい。DPB230は、同期DRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、または他のタイプのメモリデバイスなど、様々なメモリデバイスのいずれかによって形成され得る。デコード済みピクチャバッファ(DPB)230は、1つまたは複数のフィルタリング済みブロック221を記憶するように構成され得る。デコード済みピクチャバッファ230は、同じ現在のピクチャの、または異なるピクチャ、たとえば、以前に再構成されたピクチャの、他の以前にフィルタリングされたブロック、たとえば、以前に再構成されフィルタリングされたブロック221、を記憶するようにさらに構成されてよく、たとえば、フレーム間予測のために、完全な以前に再構成された、すなわち、デコードされた、ピクチャ(および対応する参照ブロックおよびサンプル)および/または部分的に再構成された現在のピクチャ(および対応する参照ブロックおよびサンプル)を提供し得る。デコード済みピクチャバッファ(DPB)230は、また、たとえば再構成済みブロック215がループフィルタユニット220によってフィルタリングされていない場合に、1つもしくは複数のフィルタリングされていない再構成済みブロック215、もしくは一般に、フィルタリングされていない再構成済みサンプル、または再構成済みブロックもしくはサンプルの任意の他のさらに処理されたバージョンを記憶するように構成され得る。
モード選択(パーティション分割&予測)
モード選択ユニット260は、パーティション分割ユニット262、フレーム間予測ユニット244、およびフレーム内予測ユニット254を備え、元のピクチャデータ、たとえば、元のブロック203(現在のピクチャ17の現在のブロック203)、および再構成済みピクチャデータ、たとえば、同じ(現在の)ピクチャの、および/または1つもしくは複数の以前にデコードされたピクチャからの、たとえば、デコード済みピクチャバッファ230もしくは他のバッファ(たとえば、ラインバッファ、図示せず)からの、フィルタリングされたおよび/またはフィルタリングされていない再構成済みサンプルもしくはブロックを受信するか、または取得するように構成される。再構成済みピクチャデータは、予測、たとえばフレーム間予測またはフレーム内予測のための参照ピクチャデータとして使用され、予測ブロック265または予測因子265を得る。
モード選択ユニット260は、現在のブロック予測モード(パーティション分割を含まず)および予測モード(たとえば、フレーム内予測モードまたはフレーム間予測モード)に対するパーティション分割を決定するか、または選択し、残差ブロック205の計算および再構成済みブロック215の再構成に使用される、対応する予測ブロック265を生成するように構成され得る。
モード選択ユニット260の実施形態は、パーティション分割および予測モード(たとえば、モード選択ユニット260によってサポートされるか、またはそれに利用可能なものから)を選択するように構成されてよく、これは、最良一致または言い換えると最小残差(最小残差は、伝送または記憶に対するより良好な圧縮を意味する)、または最小シグナリングオーバーヘッド(最小シグナリングオーバーヘッドは、伝送または記憶に対するより良好な圧縮を意味する)を提供するか、またはその両方を考慮し、もしくはバランスをとる。モード選択ユニット260は、レート歪み最適化(RDO)に基づきパーティション分割および予測モードを決定する、すなわち、最小のレート歪みを提供する予測モードを選択するように構成され得る。この文脈における「最良」、「最小」、「最適」などの語は、必ずしも全体として「最良」、「最小」、「最適」などを指すのではなく、閾値を超える値または閾値を下回る値のような終了または選択基準の充足、または「次善最適選択」に潜在的に至るが複雑さおよび処理時間を低減する他の制約条件を指すこともある。
言い換えると、パーティション分割ユニット262は、たとえば、四分木パーティション分割(QT)、二分木パーティション分割(BT)、もしくは三分木パーティション分割(TT)、またはそれらの任意の組合せを繰り返し使用して、ブロック203をより小さなブロックパーティションまたはサブブロック(これは再びブロックを形成する)に分割し、たとえば、ブロックパーティションまたはサブブロックの各々に対して予測を実行するように構成されてよく、モード選択は、パーティション分割済みブロック203の木構造の選択を含み、予測モードは、ブロックパーティションまたはサブブロックの各々に適用される。
次に、例示的なビデオエンコーダ20によって実行されるパーティション分割(たとえば、パーティション分割ユニット260による)および予測処理(フレーム間予測ユニット244およびフレーム内予測ユニット254による)について、より詳細に説明する。
パーティション分割
パーティション分割ユニット262は、現在のブロック203をより小さなパーティション、たとえば、正方形または長方形のサイズのより小さなブロックにパーティション分割(または分割)し得る。これらの小さいブロック(サブブロックとも称され得る)は、なおいっそう小さいパーティションにさらにパーティション分割されてもよい。これは、木パーティション分割または階層的木パーティション分割とも称され、たとえば、ルート木レベル0(階層レベル0、深さ0)の、ルートブロックは、再帰的にパーティション分割され、たとえば、次に低い木レベルの2つ以上のブロック、たとえば、木レベル1(階層レベル1、深さ1)のノードにパーティション分割されるものとしてよく、これらのブロックは、たとえば終了基準が満たされる、たとえば、最大木深さもしくは最小ブロックサイズに達したという理由でパーティション分割が終了するまで、次に低いレベル、たとえば、木レベル2(階層レベル2、深さ2)の2つ以上のブロックに再び分割される、などのように続き得る。もうパーティション分割されないブロックは、木の葉ブロックまたは葉ノードとも称される。2つのパーティションへのパーティション分割を使用する木は、二分木(BT)と称され、3つのパーティションへのパーティション分割を使用する木は、三分木(TT)と称され、4つのパーティションへのパーティション分割を使用する木は、四分木(QT)と称される。
前に述べたように、本明細書において使用されるような「ブロック」という用語は、ピクチャの一部、特に正方形または長方形の部分であり得る。たとえば、HEVCおよびVVCを参照すると、ブロックは、コーディングツリーユニット(CTU)、コーディングユニット(CU)、予測ユニット(PU)、および変換ユニット(TU)ならびに/または対応するブロック、たとえば、コーディングツリーブロック(CTB)、コーディングブロック(CB)、変換ブロック(TB)もしくは予測ブロック(PB)であり得るか、または対応し得る。
たとえば、コーディングツリーユニット(CTU)は、ルーマサンプルのCTB、3つのサンプル配列を有するピクチャのクロマサンプルの2つの対応するCTB、またはモノクロピクチャもしくはサンプルをコーディングするために使用される3つの別々の色平面およびシンタックス構造を使用してコーディングされたピクチャのサンプルのCTBであり得るか、または含み得る。それに対応して、コーディングツリーブロック(CTB)は、CTBへの成分の分割がパーティション分割であるようなNのある値に対するサンプルのN×Nブロックであり得る。コーディングユニット(CTU)は、ルーマサンプルのコーディングブロック、3つのサンプル配列を有するピクチャのクロマサンプルの2つの対応するコーディングブロック、またはモノクロピクチャもしくはサンプルをコーディングするために使用される3つの別々の色平面およびシンタックス構造を使用してコーディングされたピクチャのサンプルのコーディングブロックであり得るか、または含み得る。それに対応して、コーディングブロック(CB)は、コーディングブロックへのCTBの分割がパーティション分割であるようなMおよびNのある値に対するサンプルのM×Nブロックであり得る。
実施形態において、たとえば、HEVCによれば、コーディングツリーユニット(CTU)は、コーディングツリーとして示される四分木構造を使用することによってCUに分割され得る。ピクチャ領域をピクチャ間(時間的)予測を使用してピクチャ領域をコーディングするかまたはピクチャ内(空間的)予測を使用してピクチャ領域をコーディングするかの決定は、CUレベルで行われる。各CUは、PU分割タイプに従って1個、2個、または4個のPUにさらに分割され得る。1つのPU内では、同じ予測プロセスが適用され、関連する情報はPUベースでデコーダに伝送される。PU分割タイプに基づく予測プロセスを適用することによって残差ブロックを取得した後に、CUは、CUに対するコーディングツリーに類似する別の四分木構造に従ってCUが変換ユニット(TU)にパーティション分割され得る。
実施形態では、たとえば、Versatile Video Coding(VVC)と称される、現在開発中の最新のビデオコーディング規格に従って、四分木および二分木(QTBT)パーティション分割が、コーディングブロックをパーティション分割するために使用される。QTBTブロック構造では、CUは、正方形または長方形のいずれかの形状を有することができる。たとえば、コーディングツリーユニット(CTU)は、最初に四分木構造によってパーティション分割される。四分木葉ノードは、二分木または三分(または3分)木構造によってさらにパーティション分割される。パーティション分割木葉ノードは、コーディングユニット(CU)と呼ばれ、そのセグメント分割は、さらにパーティション分割することなく予測処理と変換処理とに使用される。これは、CU、PU、TUがQTBTコーディングブロック構造において同じブロックサイズを有することを意味する。それに並行して、多重パーティション、たとえば、三分木パーティションはQTBTコーディングブロック構造と一緒に使用されることも提案された。
一例において、ビデオエンコーダ20のモード選択ユニット260は、本明細書において説明されているパーティション分割技術の任意の組合せを実行するように構成され得る。
上で説明されているように、ビデオエンコーダ20は、(予め決定されている)予測モードのセットから最良の、もしくは最適な予測モードを決定するか、または選択するように構成される。予測モードのセットは、たとえば、フレーム内予測モードおよび/またはフレーム間予測モードを含み得る。
フレーム内予測
フレーム内予測モードのセットは、35個の異なるフレーム内予測モード、たとえば、DC(もしくは平均)モードおよび平面モードのような非方向性モード、もしくはたとえばHEVCで定義されているような方向性モードを含み得るか、または67個の異なるフレーム内予測モード、たとえば、DC(もしくは平均)モードおよび平面モードのような非方向性モード、もしくはたとえばVVCに対して定義されているような、方向性モードを含み得る。
フレーム内予測ユニット254は、同じ現在のピクチャの隣接ブロックの再構成済みサンプルを使用して、フレーム内予測モードのセットのフレーム内予測モードに従ってフレーム内予測ブロック265を生成するように構成される。
フレーム内予測ユニット254(または一般にモード選択ユニット260)は、フレーム内予測パラメータ(または一般にブロックに対する選択されたフレーム内予測モードを示す情報)を、エンコード済みピクチャデータ21に含めるためのシンタックス要素266の形態でエントロピーエンコードユニット270に出力し、それにより、たとえば、ビデオデコーダ30が予測パラメータを受信してデコードに使用し得るようにさらに構成される。
フレーム間予測
フレーム間予測モードのセット(または可能なフレーム間予測モード)は、利用可能な参照ピクチャ(すなわち、たとえばDBP230に記憶されている、以前の少なくとも部分的にデコードされたピクチャ)および他のフレーム間予測パラメータ、たとえば参照ピクチャ全体もしくは、参照ピクチャの一部のみ、たとえば、現在のブロックの領域の周りの探索ウィンドウ領域が、最良一致参照ブロックを探索するために使用されるかどうか、および/またはたとえば、ピクセル補間、たとえば、半/セミペルおよび/もしくは1/4ペル補間が適用されるかどうか、に依存する。
上記の予測モードに加えて、スキップモードおよび/または直接モードが適用されてもよい。
フレーム間予測ユニット244は、動き推定(ME)ユニットおよび動き補償(MC)ユニット(両方とも図2に示されていない)を備え得る。動き推定ユニットは、動き推定のために、ピクチャブロック203(現在のピクチャ17の現在のピクチャブロック203)およびデコード済みピクチャ231、または少なくとも1つもしくは複数の以前に再構成されたブロック、たとえば、他の/異なる以前にデコードされたピクチャ231の1つもしくは複数の再構成済みブロックを受信するか、もしくは取得するように構成され得る。たとえば、ビデオシーケンスは、現在のピクチャと以前にデコードされたピクチャ231とを含み得るか、または言い換えると、現在のピクチャおよび以前にデコードされたピクチャ231は、ビデオシーケンスを形成するピクチャの一部であるか、またはピクチャのシーケンスを形成し得る。
エンコーダ20は、たとえば、複数の他のピクチャの同じもしくは異なるピクチャの複数の参照ブロックから参照ブロックを選択し、参照ピクチャ(もしくは参照ピクチャインデックス)および/または参照ブロックの位置(x、y座標)と現在のブロックの位置との間のオフセット(空間的オフセット)をフレーム間予測パラメータとして動き推定ユニットに提供するように構成され得る。このオフセットは、動きベクトル(MV)とも呼ばれる。
動き補償ユニットは、フレーム間予測パラメータを取得し、たとえば、フレーム間予測パラメータを受信し、フレーム間予測パラメータに基づき、またはフレーム間予測パラメータを使用してフレーム間予測を実行し、フレーム間予測ブロック265を取得するように構成される。動き補償ユニットによって実行される、動き補償は、場合によってはサブピクセル精度で補間を実行する、動き推定によって決定された動き/ブロックベクトルに基づき予測ブロックをフェッチするか、または生成することを伴い得る。補間フィルタリングは、知られているピクセルサンプルから追加のピクセルサンプルを生成し、それによって、ピクチャブロックをコーディングするために使用され得る候補予測ブロックの数を潜在的に増大させ得る。現在のピクチャブロックのPUのための動きベクトルを受信した後、動き補償ユニットは、参照ピクチャリストのうちの1つにおいて動きベクトルが指す予測ブロックの位置を特定し得る。
動き補償ユニットは、また、ビデオスライスのピクチャブロックをデコードする際にビデオデコーダ30が使用するブロックおよびビデオスライスに関連付けられているシンタックス要素を生成し得る。
エントロピーコーディング
エントロピー符号化ユニット270は、たとえば、エントロピー符号化アルゴリズムもしくはスキーム(たとえば、可変長コーディング(VLC)スキーム、コンテキスト適応型VLC(CAVLC)スキーム、算術コーディングスキーム、2値化、コンテキスト適応型バイナリ算術コーディング(CABAC)、シンタックスベース文脈適応型バイナリ算術コーディング(SBAC)、確率区間区分エントロピー(PIPE)コーディング、または別のエントロピーエンコード方法もしくは技術)またはバイパス(圧縮なし)を、量子化済み係数209、フレーム間予測パラメータ、フレーム内予測パラメータ、ループフィルタパラメータ、および/または他のシンタックス要素上で適用し、たとえば、エンコード済みビットストリーム21の形態で出力272を介して出力され得るエンコード済みピクチャデータ21を取得するように構成され、したがって、たとえば、ビデオデコーダ30はそれらのパラメータを受信しデコードに使用し得る。エンコード済みビットストリーム21は、ビデオデコーダ30に伝送されるか、またはビデオデコーダ30によるその後の伝送もしくは取り出しのためにメモリに記憶され得る。
ビデオエンコーダ20の他の構造的変更形態は、ビデオストリームをエンコードするために使用できる。たとえば、非変換ベースのエンコーダ20は、いくつかのブロックまたはフレームに対して、変換処理ユニット206なしで、直接的に、残差信号を量子化することができる。別の実装形態において、エンコーダ20は、単一のユニットに組み合わされた量子化ユニット208および逆量子化ユニット210を有することができる。
デコーダおよびデコード方法
図3は、本出願の技術を実装するように構成されているビデオデコーダ30の一例を示している。ビデオデコーダ30は、たとえば、エンコーダ20によってエンコードされた、エンコード済みピクチャデータ21(たとえば、エンコード済みビットストリーム)21を受信して、デコード済みピクチャ331を取得するように構成される。エンコード済みピクチャデータまたはビットストリームは、エンコード済みピクチャデータをデコードするための情報、たとえば、エンコード済みビデオスライスのピクチャブロックおよび関連するシンタックス要素を表すデータを含む。
図3の例では、デコーダ30は、エントロピーデコードユニット304、逆量子化ユニット310、逆変換処理ユニット312、再構成ユニット314(たとえば、総和器314)、ループフィルタ320、デコード済みピクチャバッファ(DBP)330、フレーム間予測ユニット344、およびフレーム内予測ユニット354を備える。フレーム間予測ユニット344は、動き補償ユニットであるか、または動き補償ユニットを含み得る。ビデオデコーダ30は、いくつかの例において、図2からのビデオエンコーダ100に関して説明されているエンコードパスに一般的に相反するデコードパスを実行し得る。
エンコーダ20に関して説明されているように、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、ループフィルタ220、デコード済みピクチャバッファ(DPB)230、フレーム間予測ユニット344、およびフレーム内予測ユニット354は、ビデオエンコーダ20の「ビルトインデコーダ」を形成するとも称される。したがって、逆量子化ユニット310は、逆量子化ユニット110と機能が同一であってよく、逆変換処理ユニット312は、逆変換処理ユニット212と機能が同一であってよく、再構成ユニット314は、再構成ユニット214と機能が同一であってよく、ループフィルタ320は、ループフィルタ220と機能が同一であってよく、デコード済みピクチャバッファ330は、デコード済みピクチャバッファ230と機能が同じであってよい。したがって、ビデオ20エンコーダのそれぞれのユニットおよび機能に対して与えられる説明は、それに対応して、ビデオデコーダ30のそれぞれのユニットおよび機能に適用される。
エントロピーデコード
エントロピーデコードユニット304は、ビットストリーム21(または一般にエンコード済みピクチャデータ21)を解析し、たとえばエンコード済みピクチャデータ21に対してエントロピーデコードを実行して、たとえば量子化係数309および/またはデコード済みコーディングパラメータ(図3には示されていない)、たとえばフレーム間予測パラメータ(たとえば、参照ピクチャインデックスおよび動きベクトル)、フレーム内予測パラメータ(たとえば、フレーム内予測モードまたはインデックス)、変換パラメータ、量子化パラメータ、ループフィルタパラメータ、および/または他のシンタックス要素のいずれかもしくはすべて、を取得するように構成される。エントロピーデコードユニット304は、エンコーダ20のエントロピーエンコードユニット270に関して説明されているようにエンコードスキームに対応するデコードアルゴリズムまたはスキームを適用するように構成され得る。エントロピーデコードユニット304は、フレーム間予測パラメータ、フレーム内予測パラメータ、および/または他のシンタックス要素をモード選択ユニット360に提供し、他のパラメータをデコーダ30の他のユニットに提供するようにさらに構成され得る。ビデオデコーダ30は、ビデオスライスレベルおよび/またはビデオブロックレベルにおいてシンタックス要素を受信し得る。
逆量子化
逆量子化ユニット310は、エンコード済みピクチャデータ21から量子化パラメータ(QP)(または一般に逆量子化に関係する情報)および量子化済み係数を受け取り(たとえば、解析および/またはデコードによって、たとえば、エントロピーデコードユニット304によって)、量子化パラメータに基づきデコード済み量子化係数309に逆量子化を適用して、変換係数311とも称され得る、量子化解除済み係数311を取得するように構成され得る。逆量子化プロセスは、ビデオスライス内の各ビデオブロックについてビデオエンコーダ20によって決定された量子化パラメータを使用して、量子化の程度、また同様に、適用されるべき逆量子化の程度を決定することを含み得る。
逆変換
逆変換処理ユニット312は、変換係数311とも称される、量子化解除済み係数311を受信し、サンプル領域において再構成済み残差ブロック213を取得するために量子化解除済み係数311に変換を適用するように構成され得る。再構成済み残差ブロック213は、変換ブロック313とも称され得る。変換は、逆変換、たとえば、逆DCT、逆DST、逆整数変換、または概念的に類似する逆変換プロセスであってもよい。逆変換処理ユニット312は、変換パラメータまたは対応する情報をエンコード済みピクチャデータ21から(たとえば、解析および/またはデコード、たとえば、エントロピーデコードユニット304によって)受け取り、量子化解除済み係数311に適用されるべき変換を決定するようにさらに構成され得る。
再構成
再構成ユニット314(たとえば、加算器または総和器314)は、再構成済み残差ブロック313を予測ブロック365に加算してサンプル領域内の再構成済みブロック315を取得することを、たとえば、再構成済み残差ブロック313のサンプル値および予測ブロック365のサンプル値を加算することによって行うように構成され得る。
フィルタリング
ループフィルタユニット320(コーディングループ内またはコーディングループ後の)は、再構成済みブロック315をフィルタリングしてフィルタリング済みブロック321を取得し、たとえば、ピクセル遷移を平滑化するか、または他の何らかの形でビデオ画質を改善するように構成される。ループフィルタユニット320は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ、または1つもしくは複数の他のフィルタ、たとえば、双方向フィルタ、適応ループフィルタ(ALF)、鮮鋭化、平滑化フィルタもしくは協調フィルタ、またはそれらの任意の組合せなどの1つもしくは複数のループフィルタを含み得る。ループフィルタユニット320は、ループフィルタであるものとして図3に示されているが、他の構成では、ループフィルタユニット320は、ポストループフィルタとして実装されてもよい。
デコード済みピクチャバッファ
ピクチャのデコード済みビデオブロック321は、次いで、デコード済みピクチャバッファ330に記憶され、これは、デコード済みピクチャ331を、他のピクチャおよび/または出力されるそれぞれの表示のための後続の動き補償の参照ピクチャとして記憶する。
デコーダ30は、ユーザに提示するため、またはユーザの視聴のために、たとえば、出力312を介して、デコード済みピクチャ311を出力するように構成される。
予測
フレーム間予測ユニット344は、フレーム間予測ユニット244と(特に動き補償ユニットと)同一であり得、フレーム内予測ユニット354は、フレーム間予測ユニット254と機能が同一であってよく、エンコード済みピクチャデータ21から受け取ったパーティション分割および/または予測パラメータまたはそれぞれの情報に基づき(たとえば、解析および/またはデコード、たとえばエントロピーデコードユニット304によって)分割またはパーティション分割決定および予測を実行する。モード選択ユニット360は、再構成済みピクチャ、ブロック、またはそれぞれのサンプル(フィルタリングもしくは未フィルタリング)に基づきブロック毎に予測(フレーム内またはフレーム間予測)を実行し、予測ブロック365を取得するように構成され得る。
ビデオスライスがフレーム内コーディング済み(I)スライスとしてコーディングされるときに、モード選択ユニット360のフレーム内予測ユニット354は、信号で通知されるフレーム内予測モードと、現在のピクチャの以前にデコードされたブロックからのデータとに基づき現在のビデオスライスのピクチャブロックに対する予測ブロック365を生成するように構成される。ビデオピクチャが、フレーム間コーディング済み(すなわち、BまたはP)スライスとしてコーディングされるときに、モード選択ユニット360のフレーム間予測ユニット344(たとえば、動き補償ユニット)は、エントロピーデコードユニット304から受信された動きベクトルおよび他のシンタックス要素に基づき現在のビデオスライスのビデオブロックに対する予測ブロック365を生成するように構成される。フレーム間予測について、予測ブロックは、参照ピクチャリストのうちの1つのリスト内の参照ピクチャのうちの1つから生成され得る。ビデオデコーダ30は、DPB330内に記憶されている参照ピクチャに基づき既定の構成技術を使用して、参照フレームリスト、リスト0およびリスト1を構成し得る。
モード選択ユニット360は、動きベクトルおよび他のシンタックス要素を解析することによって現在のビデオスライスのビデオブロックに対する予測情報を決定するように構成され、デコードされている現在のビデオブロックに対する予測ブロックを生成するために予測情報を使用する。たとえば、モード選択ユニット360は、ビデオスライスのビデオブロックをコーディングするために使用される予測モード(たとえば、フレーム内もしくはフレーム間予測)、フレーム間予測スライスタイプ(たとえば、Bスライス、Pスライス、もしくはGPBスライス)、スライスに対する参照ピクチャリストのうちの1つまたは複数に対する構成情報、スライスの各フレーム間エンコード済みビデオブロックに対する動きベクトル、スライスの各フレーム間コーディング済みビデオブロックに対するフレーム間予測ステータス、および現在のビデオスライス内のビデオブロックをデコードするための他の情報を決定するために、受信されたシンタックス要素のいくつかを使用する。
ビデオデコーダ30の他の変更形態は、エンコード済みピクチャデータ21をデコードするために使用され得る。たとえば、デコーダ30は、ループフィルタリングユニット320なしで出力ビデオストリームを生成することができる。たとえば、非変換ベースのデコーダ30は、いくつかのブロックまたはフレームに対して、逆変換処理ユニット312なしで、残差信号を直接的に逆量子化することができる。別の実装形態において、ビデオデコーダ30は、単一ユニットに組み合わせた逆量子化ユニット310および逆変換処理ユニット312を有することができる。
エンコーダ20およびデコーダ30において、現在のステップの処理結果がさらに処理されて、次のステップに出力されてもよいことは理解されるべきである。たとえば、補間フィルタリング、動きベクトル導出、またはループフィルタリングの後に、クリップまたはシフトなどのさらなる操作が、補間フィルタリング、動きベクトル導出、またはループフィルタリングの処理結果に対して実行されてもよい。
さらなる演算が、現在のブロックの導出された動きベクトル(限定はしないが、アフィンモードの制御点動きベクトル、アフィン、平面、ATMVPモードにおけるサブブロック動きベクトル、時間的動きベクトルなどを含む)に対して適用されてよいことに留意されたい。たとえば、動きベクトルの値は、その表現するビットに従って事前定義された範囲に制約される。動きベクトルの表現ビットがbitDepthの場合、範囲は-2^(bitDepth-1)~2^(bitDepth-1)-1であり、「^」はべき乗を意味する。たとえば、bitDepthが16に等しくなるように設定される場合、範囲は-32768~32767であり、bitDepthが18に等しくなるように設定される場合、範囲は-131072~131071である。たとえば、導出された動きベクトル(たとえば、1つの8×8ブロック内の4つの4×4サブブロックのMV)の値は、4つの4×4サブブロックMVの整数部の間の最大差が、1ピクセル以下など、Nピクセル以下であるように制約される。ここで、bitDepthに従って動きベクトルを制約するための方法を2つ提供する。
方法1:フロー演算により、オーバーフローMSB(最上位ビット)を取り除く
ux=(mvx+2bitDepth)%2bitDepth (1)
mvx=(ux>=2bitDepth-1)?(ux-2bitDepth):ux (2)
uy=(mvy+2bitDepth)%2bitDepth (3)
mvy=(uy>=2bitDepth-1)?(uy-2bitDepth):uy (4)
mvxは画像ブロックまたはサブブロックの動きベクトルの水平成分であり、mvyは画像ブロックまたはサブブロックの動きベクトルの垂直成分であり、uxおよびuyは中間値を示す。
たとえば、mvxの値が-32769である場合、式(1)および(2)を適用した後、結果の値は32767である。コンピュータシステムでは、10進数は、2の補数として記憶される。-32769の2補数は、1,0111,1111,1111,1111(17ビット)であり、次いでMSBは捨てられ、したがってその結果得られる2の補数は、0111,1111,1111,1111(10進数は32767)であり、これは式(1)および(2)を適用することによる出力と同じである。
ux=(mvpx+mvdx+2bitDepth)%2bitDepth (5)
mvx=(ux>=2bitDepth-1)?(ux-2bitDepth):ux (6)
uy=(mvpy+mvdy+2bitDepth)%2bitDepth (7)
mvy=(uy>=2bitDepth-1)?(uy-2bitDepth):uy (8)
これらの演算は、式(5)から(8)に示されているように、mvpとmvdとの和において適用され得る。
方法2:値をクリップすることによってオーバーフローMSBを取り除く
vx=Clip3(-2bitDepth-1,2bitDepth-1-1,vx)
vy=Clip3(-2bitDepth-1,2bitDepth-1-1,vy)
vxは画像ブロックまたはサブブロックの動きベクトルの水平成分であり、vyは画像ブロックまたはサブブロックの動きベクトルの垂直成分であり、x、y、およびzはそれぞれMVクリッピングプロセスの3入力値に対応し、関数Clip3の定義は次の通りである。
Figure 2023511206000002
図4は、本開示の一実施形態による、ビデオコーディングデバイス400の概略図である。ビデオコーディングデバイス400は、本明細書において説明されているような開示された実施形態を実施するのに適している。一実施形態において、ビデオコーディングデバイス400は、図1Aのビデオデコーダ30などのデコーダ、または図1Aのビデオエンコーダ20などのエンコーダであってよい。
ビデオコーディングデバイス400は、データを受信するための受信ポート410(または入力ポート410)および受信機ユニット(Rx)420と、データを処理するためのプロセッサ、論理ユニット、または中央演算処理装置(CPU)430と、データを伝送するための送信機ユニット(Tx)440および送信ポート450(または出力ポート450)と、データを記憶するためのメモリ460とを備える。ビデオコーディングデバイス400は、光信号または電気信号の送信または受信のための、受信ポート410、受信機ユニット420、送信機ユニット440、および送信ポート450に結合された光電気(OE)コンポーネントおよび電気光(EO)コンポーネントも備え得る。
プロセッサ430は、ハードウェアおよびソフトウェアによって実装される。プロセッサ430は、1つまたは複数のCPUチップ、コア(たとえば、マルチコアプロセッサとして)、FPGA、ASIC、およびDSPとして実装されてもよい。プロセッサ430は、受信ポート410、受信機ユニット420、送信機ユニット440、送信ポート450、およびメモリ460と通信する。プロセッサ430は、コーディングモジュール470を備える。コーディングモジュール470は、上で説明されている開示された実施形態を実装する。たとえば、コーディングモジュール470は、様々なコーディング動作を実装し、処理し、準備し、または提供する。したがって、コーディングモジュール470の搭載は、ビデオコーディングデバイス400の機能に実質的な改善をもたらし、ビデオコーディングデバイス400の異なる状態への変換をもたらす。代替的に、コーディングモジュール470は、メモリ460に記憶され、プロセッサ430によって実行される命令として実装される。
メモリ460は、1つまたは複数のディスク、テープドライブ、およびソリッドステートドライブを含み、そのようなプログラムが実行のために選択されたときにプログラムを記憶し、プログラムの実行中に読み出される命令およびデータを記憶するために、オーバーフローデータ記憶装置デバイスとして使用され得る。メモリ460は、たとえば、揮発性および/または不揮発性であってよく、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、三値連想メモリ(TCAM)、および/またはスタティックランダムアクセスメモリ(SRAM)であってよい。
図5は、例示的な実施形態による、図1からのソースデバイス12およびデスティネーションデバイス14のいずれかまたは両方として使用され得る装置500の簡略化されたブロック図である。
装置500内のプロセッサ502は、中央演算処理装置であってよい。代替的に、プロセッサ502は、現在存在しているまたはこの後開発される情報を操作するか、もしくは処理することができる、任意の他のタイプのデバイスまたは複数のデバイスであってよい。開示されている実装形態は、図示されているような単一のプロセッサ、たとえば、プロセッサ502により実施され得るが、速度および効率に関する利点は、複数のプロセッサを使用することで達成され得る。
装置500内のメモリ504は、一実装形態においてリードオンリーメモリ(ROM)デバイスまたはランダムアクセスメモリ(RAM)デバイスであってよい。他のタイプの記憶装置デバイスも適したものであれば、メモリ504として使用できる。メモリ504は、バス512を使用してプロセッサ502によってアクセスされるコードおよびデータ506を含み得る。メモリ504は、オペレーティングシステム508およびアプリケーションプログラム510をさらに収めることができ、アプリケーションプログラム510はプロセッサ502が本明細書において説明されている方法を実行することを可能にする少なくとも1つのプログラムを含む。たとえば、アプリケーションプログラム510は、アプリケーション1からNを含むものとしてよく、これらは本明細書において説明されている方法を実行するビデオコーディングアプリケーションをさらに含む。
装置500は、ディスプレイ518などの、1つまたは複数の出力デバイスも備えることができる。ディスプレイ518は、一例において、ディスプレイをタッチ入力を感知するように動作可能であるタッチセンサー式素子と組み合わせたタッチセンサー式ディスプレイであってよい。ディスプレイ518は、バス512を介してプロセッサ502に結合することができる。
ここでは単一のバスとして描かれているが、装置500のバス512は複数のバスから構成されてもよい。さらに、二次記憶装置514は、装置500の他のコンポーネントに直接的に結合されるか、またはネットワークを介してアクセスされ、メモリカードなどの単一の組み込みユニットまたは複数のメモリカードなどの複数のユニットを備えることもできる。したがって、装置500は、多種多様な構成で実装することができる。
ループ内フィルタの背景
VTM3には、全部で3種類のループ内フィルタがある。VTM3では、デブロッキングフィルタおよびSAO(HEVCにおける2つのループフィルタ)の他に、適応ループフィルタ(ALF)が適用される。VTM3におけるフィルタリングプロセスの順序は、デブロッキングフィルタ、SAO、およびALFである。
ALFの背景
VTM3では、ブロックベースのフィルタ適応を有する適応ループフィルタ(ALF)が適用される。ルーマ成分に対しては、25個のフィルタのうちの1つが、局所的勾配の方向とアクティビティに基づき各4×4ブロックについて選択される。
フィルタ形状:
JEMでは、2つのダイヤモンドフィルタ形状(図6に示されているような)が、ルーマ成分に使用される。7×7のダイヤモンド形状はルーマ成分について適用され、5×5のダイヤモンド形状はクロマ成分について適用される。
ブロック分類:
ルーマ成分については、各4×4ブロックは、25個のクラスのうちの1つに分類される。分類インデックスCは、方向性Dおよびアクティビティの量子化済み値
Figure 2023511206000003
に基づき、
Figure 2023511206000004
のように導出される。
Dおよび
Figure 2023511206000005
を計算するために、水平、垂直、および2つの対角線方向の勾配が、最初に
Figure 2023511206000006
のように1Dラプラシアンを使用して計算される。添字iおよびjは4×4ブロック内の左上サンプルの座標を指し、R(i,j)は座標(i,j)における再構成済みサンプルを示す。
ブロック分類の複雑さを低減するために、サブサンプリング済み1Dラプラシアン計算が適用される。図7に示されているように、同じサブサンプリング済み位置がすべての方向の勾配計算に使用される。
次いで、水平方向および垂直方向の勾配の最大値および最小値が、
Figure 2023511206000007
のように設定される。
2つの対角線方向の勾配の最大値および最小値が、
Figure 2023511206000008
のように設定される。
方向性Dの値を導出するために、これらの値は、互いに比較され、2つの閾値t1およびt2と比較される。
ステップ1。
Figure 2023511206000009
および
Figure 2023511206000010
が両方とも真である場合、Dは0に設定される。
ステップ2。
Figure 2023511206000011
である場合にはステップ3に進み、そうでなければステップ4に進む。
ステップ3。
Figure 2023511206000012
の場合にはDは2に設定され、そうでなければDは1に設定される。
ステップ4。
Figure 2023511206000013
の場合にはDは4に設定され、そうでなければDは3に設定される。
アクティビティ値Aは
Figure 2023511206000014
のように計算される。
Aは包含的に0から4の範囲にさらに量子化され、量子化済み値は、
Figure 2023511206000015
として表される。
ピクチャ中のクロマ成分については、分類方法が適用されず、ALF係数の単一のセットが各クロマ成分に適用される。
フィルタ係数の幾何学的変換
各4×4ルーマブロックをフィルタリングする前に、回転または対角線および垂直反転などの幾何学的変換が、そのブロックについて計算された勾配値に応じてフィルタ係数f(k,l)に適用される。これは、フィルタサポート領域内のサンプルにこれらの変換を適用することと等価である。これは、ALFが適用される異なるブロックをその方向性を揃えることによって類似性を高めるという考え方である。
対角線、垂直反転、および回転の3つの幾何学的変換が導入される。
対角線:fD(k,l)=f(l,k) (17)
垂直反転:fV(k,l)=f(k,K-l-1) (18)
回転:fR(k,l)=f(K-l-1,k) (19)
Kはフィルタのサイズであり、0≦k、l≦K-1は係数座標であり、配置(0,0)が左上隅にあり、配置(K-1,K-1)が右下隅にある。変換は、そのブロックについて計算された勾配値に応じて、フィルタ係数f(k,l)に適用される。変換と4方向の4つの勾配との間の関係が、次の表に要約されている。
Figure 2023511206000016
フィルタパラメータ信号発生
VTM3では、ALFフィルタパラメータはスライスヘッダで信号により伝えられる。ルーマフィルタ係数の最大25セットが信号により伝えられ得る。ビットオーバーヘッドを低減するために、異なる分類のフィルタ係数がマージされ得る。
フィルタリングプロセスは、CTBレベルで制御することができる。ルーマCTBにALFが適用されるかどうかを示すフラグが信号により伝えられる。各クロマCTBについては、クロマCTBにALFが適用されるかどうかがalf_chroma_ctb_present_flagの値に依存していることを示すフラグが信号によって伝えられ得る。
フィルタ係数は128に等しいノルムで量子化される。乗算の複雑さをさらに制限するために、中心位置の係数値が0から28の範囲内にあり、残りの位置の係数値が包含的に-27から27-1の範囲内にあるものとするビットストリーム適合条件が適用される。
フィルタリングプロセス
デコーダ側では、ALFがCTBについて有効化されたときに、CU内の各サンプルR(i,j)は、フィルタリングされ、その結果、以下に示されているようなサンプル値R'(i,j)が得られ、Lはフィルタ長であり、fm,nはフィルタ係数であり、f(k,l)はデコード済みフィルタ係数を表す。
Figure 2023511206000017
VVC仕様によるALFシンタックス仕様
適応ループフィルタプロセス
1.1 概要
このプロセスの入力は、適応ループフィルタrecPictureL、recPictureCb、およびrecPictureCrの前の再構成済みピクチャサンプル配列である。
このプロセスの出力は、適応ループフィルタalfPictureL、alfPictureCb、およびalfPictureCrの後の修正された再構成済みピクチャサンプル配列である。
適応ループフィルタalfPictureL、alfPictureCb、およびalfPictureCrの後の修正された再構成済みピクチャサンプル配列内のサンプル値は、それぞれ、適応ループフィルタrecPictureL、recPictureCb、およびrecPictureCrの前の再構成済みピクチャサンプル配列内のサンプル値に等しくなるように初期設定される。
tile_group_alf_enabled_flagの値が1に等しいときに、ルーマコーディングツリーブロック配置(rx,ry)を有するすべてのコーディングツリーユニットについて、rx=0..PicWidthInCtbs-1およびry=0..PicHeightInCtbs-1であり、次のプロセスが適用される。
alf_ctb_flag[0][rx][ry]の値が1に等しいときに、1.2節において指定されているようなルーマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureL、alfPictureL、および(rx<<CtbLog2SizeY,ry<<CtbLog2SizeY)に等しくなるように設定されているルーマコーディングツリーブロック配置(xCtb,yCtb)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureLである。
alf_ctb_flag[1][rx][ry]の値が1に等しいときに、1.1節において指定されているようなクロマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureCbに等しくなるように設定されたrecPicture、alfPictureCbに等しくなるように設定されたalfPicture、および(rx<<(CtbLog2SizeY-1),ry<<(CtbLog2SizeY-1))に等しくなるように設定されたクロマコーディングツリーブロック配置(xCtbC,yCtbC)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureCbである。
alf_ctb_flag[2][rx][ry]の値が1に等しいときに、1.4節において指定されているようなクロマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureCrに等しくなるように設定されたrecPicture、alfPictureCrに等しくなるように設定されたalfPicture、および(rx<<(CtbLog2SizeY-1),ry<<(CtbLog2SizeY-1))に等しくなるように設定されたクロマコーディングツリーブロック配置(xCtbC,yCtbC)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureCrである。
1.2 ルーマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
適応ループフィルタプロセスの前の再構成済みルーマピクチャサンプル配列recPictureL、
フィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureL、
現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)。
この処理の出力は、修正されフィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureLである。
フィルタインデックスの節1.3の導出プロセスは、配置(xCtb,yCtb)および再構成済みルーマピクチャサンプル配列recPictureLを入力とし、x,y=0..CtbSizeY-1であるfiltIdx[x][y]およびtransposeIdx[x][y]を出力として、呼び出される。
フィルタリングされた再構成済みルーマサンプルalfPictureL[x][y]の導出のために、現在のルーマコーディングツリーブロックrecPictureL[x][y]の内側の各再構成済みルーマサンプルは、x,y=0..CtbSizeY-1として次のようにフィルタリングされる。
filtIdx[x][y]によって指定されたフィルタに対応するルーマフィルタ係数f[j]の配列は、j=0..12として、次のように導出される。
f[j]=AlfCoeffL[filtIdx[x][y]][j]。
ルーマフィルタ係数filterCoeffは、transposeIdx[x][y]に応じて次のように導出される。
transposeIndex[x][y]==1の場合、
filterCoeff[]={f[9],f[4],f[10],f[8],f[1],f[5],f[11],f[7],f[3],f[0],f[2],f[6],f[12]}
そうでなければ、transposeIndex[x][y]==2の場合、
filterCoeff[]={f[0],f[3],f[2],f[1],f[8],f[7],f[6],f[5],f[4],f[9],f[10],f[11],f[12]}
そうでなければ、transposeIndex[x][y]==3の場合、
filterCoeff[]={f[9],f[8],f[10],f[4],f[3],f[7],f[11],f[5],f[1],f[0],f[2],f[6],f[12]}
そうでなければ、
filterCoeff[]={f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9],f[10],f[11],f[12]}
ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプル(x,y)の各々に対する配置(hx,vy)は、次のように導出される。
hx=Clip3(0,pic_width_in_luma_samples-1,xCtb+x)
vy=Clip3(0,pic_height_in_luma_samples-1,yCtb+y)
変数sumは、次のように導出される。
sum=filterCoeff[0]*(recPictureL[hx,vy+3]+recPictureL[hx,vy-3])+
filterCoeff[1]*(recPictureL[hx+1,vy+2]+recPictureL[hx-1,vy-2])+
filterCoeff[2]*(recPictureL[hx,vy+2]+recPictureL[hx,vy-2])+
filterCoeff[3]*(recPictureL[hx-1,vy+2]+recPictureL[hx+1,vy-2])+
filterCoeff[4]*(recPictureL[hx+2,vy+1]+recPictureL[hx-2,vy-1])+
filterCoeff[5]*(recPictureL[hx+1,vy+1]+recPictureL[hx-1,vy-1])+
filterCoeff[6]*(recPictureL[hx,vy+1]+recPictureL[hx,vy-1])+
filterCoeff[7]*(recPictureL[hx-1,vy+1]+recPictureL[hx+1,vy-1])+
filterCoeff[8]*(recPictureL[hx-2,vy+1]+recPictureL[hx+2,vy-1])+
filterCoeff[9]*(recPictureL[hx+3,vy]+recPictureL[hx-3,vy])+
filterCoeff[10]*(recPictureL[hx+2,vy]+recPictureL[hx-2,vy])+
filterCoeff[11]*(recPictureL[hx+1,vy]+recPictureL[hx-1,vy])+
filterCoeff[12]*recPictureL[hx,vy]
sum=(sum+64)>>7
修正されフィルタリングされた再構成済みルーマピクチャサンプルalfPictureL[xCtb+x][yCtb+y]は、次のように導出される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0,(1<<BitDepthY)-1,sum)。
1.3 ルーマサンプルに対するALF転置およびフィルタインデックスの導出プロセス
このプロセスの入力は、以下の通りである。
現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)、
適応ループフィルタプロセスの前の再構成済みルーマピクチャサンプル配列recPictureL。
このプロセスの出力は、以下の通りである。
x,y=0..CtbSizeY-1として、分類フィルタインデックス配列filtIdx[x][y]、
x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプル(x,y)の各々に対する配置(hx,vy)は、次のように導出される。
hx=Clip3(0,pic_width_in_luma_samples-1,x)
vy=Clip3(0,pic_height_in_luma_samples-1,y)
分類フィルタインデックス配列fltIdxおよび転置インデックス配列transposeIdxは、次の順序付けられたステップで導出される。
x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は、次のように導出される。
xおよびyが両方とも偶数であるか、またはxおよびyが両方とも奇数である場合には、次が適用される。
filtH[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y]-recPicture[hxCtb+x+1,vyCtb+y])
filtV[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x,vyCtb+y-1]-recPicture[hxCtb+x,vyCtb+y+1])
filtD0[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y-1]-recPicture[hxCtb+x+1,vyCtb+y+1])
filtD1[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x+1,vyCtb+y-1]-recPicture[hxCtb+x-1,vyCtb+y+1])
そうでなければ、filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は0に等しくなるように設定される。
x,y=0..(CtbSizeY-1)>>2として、変数varTempH1[x][y]、varTempV1[x][y]、varTempD01[x][y]、varTempD11[x][y]、およびvarTemp[x][y]は、次のように導出される。
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumOfHV[x][y]=sumH[x][y]+sumV[x][y]
x,y=-1..CtbSizeY-1として、変数dir1[x][y]、dir2[x][y]、およびdirS[x][y]は、次のように導出される。
変数hv1、hv0、dirHVは、次のように導出される。
sumV[x>>2][y>>2]がsumH[x>>2][y>>2]より大きい場合、次の式が適用される。
hv1=sumV[x>>2][y>>2]
hv0=sumH[x>>2][y>>2]
dirHV=1
そうでなければ、次が適用される。
hv1=sumH[x>>2][y>>2]
hv0=sumV[x>>2][y>>2]
dirHV=3
変数d1、d0、dirDは、次のように導出される。
sumD0[x>>2][y>>2]がsumD1[x>>2][y>>2]より大きい場合、次が適用される。
d1=sumD0[x>>2][y>>2]
d0=sumD1[x>>2][y>>2]
dirD=0
そうでなければ、次が適用される。
d1=sumD1[x>>2][y>>2]
d0=sumD0[x>>2][y>>2]
dirD=2
変数hvd1、hvd0は、次のように導出される。
hvd1=(d1*hv0>hv1*d0) ? d1:hv1
hvd0=(d1*hv0>hv1*d0) ? d0:hv0
変数dirS[x][y]、dir1[x][y]、およびdir2[x][y]は、次のように導出される。
dir1[x][y]=(d1*hv0>hv1*d0) ? dirD:dirHV
dir2[x][y]=(d1*hv0>hv1*d0) ? dirHV:dirD
dirS[x][y]=(hvd1>2*hvd0) ? 1:((hvd1*2>9*hvd0) ? 2 :0)
x,y=0..CtbSizeY-1として、変数avgVar[x][y]は、次のように導出される。
varTab[]={0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4}
avgVar[x][y]=varTab[Clip3(0, 15, (sumOfHV[x>>2][y>>2]*64)>>(3+BitDepthY))]
x=y=0..CtbSizeY-1として、分類フィルタインデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、次のように導出される。
transposeTable[]={0, 1, 0, 2, 2, 3, 1, 3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくないときに、filtIdx[x][y]は次のように修正される。
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5。
1.4 クロマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
適応ループフィルタプロセスの前の再構成済みクロマピクチャサンプル配列recPicture、
フィルタリングされた再構成済みクロマピクチャサンプル配列alfPicture、
現在のピクチャの左上サンプルに関する現在のクロマコーディングツリーブロックの左上サンプルを指定するクロマ配置(xCtbC,yCtbC)。
この処理の出力は、修正されフィルタリングされた再構成済みクロマピクチャサンプル配列alfPictureである。
現在のクロマコーディングツリーブロックのサイズctbSizeCは、次のように導出される。
ctbSizeC=CtbSizeY/SubWidthC
フィルタリングされた再構成済みクロマサンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリーブロックrecPicture[x][y]の内側の各再構成済みクロマサンプルは、x,y=0..ctbSizeC-1として次のようにフィルタリングされる。
クロマサンプルの所与の配列recPictureの内側の対応するクロマサンプル(x,y)の各々に対する配置(hx,vy)は、次のように導出される。
hx=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x)
vy=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y)
変数sumは、次のように導出される。
sum=AlfCoeffC[0]*(recPicture[hx,vy+2]+recPicture[hx,vy-2])+
AlfCoeffC[1]*(recPicture[hx+1,vy+1]+recPicture[hx-1,vy-1])+
AlfCoeffC[2]*(recPicture[hx,vy+1]+recPicture[hx,vy-1])+
AlfCoeffC[3]*(recPicture[hx-1,vy+1]+recPicture[hx+1,vy-1])+
AlfCoeffC[4]*(recPicture[hx+2,vy]+recPicture[hx-2,vy])+
AlfCoeffC[5]*(recPicture[hx+1,vy]+recPicture[hx-1,vy])+
AlfCoeffC[6]*recPicture[hx,vy]
sum=(sum+64)>>7
修正されフィルタリングされた再構成済みクロマピクチャサンプルalfPicture[xCtbC+x][yCtbC+y]は、次のように導出される。
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum)。
ルーマ成分に対するVTM-3.0の3つのカスケードループフィルタ(デブロッキング、SAO、ALF)の現在のラインバッファ要件は、11.25ラインとなるように導出され、クロマ成分については6.25ラインとなるように導出される(図8参照)。ハードウェアチップ上の増大するラインバッファ要件を受け入れることは、ラインバッファが「オンチップ」メモリ上に記憶される必要があり、ハードウェアチップの面積を増やすので、懸念事項として知られている。
VTM-3.0のラインバッファ要件を低減するために、ALFブロック分類は、ALFブロック分類が仮想境界(VB)より上または下にある任意のピクセルを必要としないように適応される。仮想境界(VB)は、「N」ピクセルだけ上方にシフトされた水平CTU境界である。各CTUについて、SAOとALFは、下側CTUが来る前にVBより上のサンプルを処理できるが、下側CTUが来るまではVBより下のサンプルを処理することはできず、これは主に垂直デブロッキングフィルタリングの遅延により引き起こされる。
VTM-3.0では、Nは、4以上の正の整数値、たとえば、N=4またはN=6を取ることができる。
ラインバッファ要件を低減するために、いくつかの例は、ブロック分類でもともと使用されているサンプルのサブセットがさらに使用されるような仕方で主にALFブロック分類を適応する。
ALFブロック分類のウィンドウサイズ(P×P)がNの整数倍でない場合について、「グリッドシフト」アプローチが使用される。現在のVTM-3.0では、ALFブロック分類は、4×4ブロックに対して実行される。したがって、VTM-3.0についてはPは4に設定される。グリッドシフトアプローチは、主に、ALFブロック分類ウィンドウをサンプルの整数個分だけシフトし、したがって所与のP×Pブロック分類ウィンドウは、仮想境界を越えることがない。したがって、「P-N」と同等であるピクチャ内の初期サンプルについては、ALFブロック分類は、2×2ブロックウィンドウのみを使用して行われるか、または最初の「P-N」ラインが、(「P-N」+1)からすぐ始まる4×4ブロックのブロック分類決定を再使用する。
ALFフィルタリングは、パディングを使用すること、または未使用のフィルタ係数を中心係数に加えること、のいずれかよってルーマおよびクロマの両方の成分に対してフィルタの歪みバージョンを使用するように適合される。そのような方法で、ALFフィルタリングに対して追加のラインバッファは必要ない。
ブロック分類が追加のラインバッファを必要としないように元のALFブロック分類の修正済みバージョンを使用する。また、ALFフィルタリングは、追加のバッファをもはや必要としないような方法で修正される。ブロック分類の修正済みバージョンは、元のブロック分類でもともと使用されているサンプルのサブセットのみを使用する。
図8に示されているように、仮想境界がCTU境界の4ライン上にあるとみなされたときに、VVCに対するルーマラインバッファ要件は11.25ルーマラインである。
このラインバッファ要件の説明は、次の通りである。CTUエッジと重なる水平エッジのデブロッキングは、決定およびフィルタリングは最初のCTUからのラインK、L、M、Mおよび底部のCTUからラインO、P..を必要とするので、行うことができない。したがって、CTU境界と重なる水平エッジのデブロッキングは、下側CTUまで延期される。したがって、再構成済みルーマサンプルであるラインK、L、M、Nは、ラインバッファ(4ライン)上に記憶されなければならない。次いで、SAOフィルタリングは、ラインAからJまでに対して実行され得る。ラインJは、デブロッキングがラインKにおいてサンプルを変化させないのでSAOフィルタリングされ得る。ラインKのSAOフィルタリングについては、エッジオフセット分類決定は、ラインバッファ(0.25ルーマラインである)にのみ記憶される。ALFフィルタリングは、ラインA~Fについてのみ実行され得る。例では、ALF分類は、各4×4ブロックについて実行される。各4×4ブロック分類は、サイズ8×8のアクティビティウィンドウを必要とし、次いでこれは、1dラプラシアンを計算して勾配を決定するために9×9ウィンドウを必要とする。
したがって、ラインG、H、I、Jのブロック分類について、仮想境界より下のSAOフィルタリング済みサンプルが必要である。また、ラインD、E、Fについては、SAOフィルタリング済みサンプルがサンプル分類に必要である。また、ラインGのALFフィルタリングは、上記から3つのSAOフィルタリング済みラインD、E、Fを必要とする。したがって、全ラインバッファ要件は次のようになる。
・ ラインK~N(水平DFピクセル)-4
・ ラインD~J(SAOフィルタリング済みピクセル)-7
・ ラインJとラインKとの間のSAOエッジオフセット分類子値-0.25
・ したがって、ルーマラインの総数は7+4+0.25=11.25である
仮想境界が4ラインであるときの修正済みブロック分類
図9は、仮想境界より上および下のラインについてALFブロック分類がどのように実行されるかを示している。
解決方法1(非対称切り捨てALFブロック分類)
図9では、ALFルーマラインバッファ(非対称バリアント)を回避するための修正済みALF分類を参照する例を開示している。
図9aおよび図18aに示されているように、仮想境界のすぐ上の4×4ブロックについては、ブロック境界より上にあるサンプルのみがブロック分類に使用される。
一実装形態において、VB(4a)のすぐ上の4×4ブロックのブロック分類について:
・ 分類においてVBより上のサンプルのみを使用する(EからIまでのライン内のサンプル)
VB(4b)のすぐ下の4×4ブロックのブロック分類について:
・ 分類においてVBより下のサンプルのみを使用する(PからLまでのライン内のサンプル)
一実装形態において、VB(4a)のすぐ上の4×4ブロックのブロック分類について:
ラインJをラインK、L、Mにパディングする。
VB(4b)のすぐ下の4×4ブロックのブロック分類について:
ラインKをラインJ、I、Hにパディングする。
図9bに示されているように、仮想境界のすぐ下の4×4ブロックのブロック分類については、仮想境界より下にあるサンプルのみが使用される。
図9a、図22a(4×4ブロックがVBより上にある場合)において、ラインGから始まるブロックに対するブロック分類は、ラインD、E、F、F、H、J、Jを使用する。ラインJに属すサンプルの勾配計算は、下にもう1ライン必要とするので、したがってラインJはラインKにパディングされる。
一実装形態において、
・ VBより上の4×4ブロックについて:
・ VBより上のサンプルのみがALFブロックの分類に寄与し、その逆もある
・ ラインJ内のサンプルの勾配計算のために、ラインKは、ラインJをパディングされる
・ VBより下の4×4ブロックについて:
・ VBより下のサンプルのみがALFブロックの分類に寄与し、その逆もある
・ ラインJ内のサンプルの勾配計算のために、ラインKは、ラインJをパディングされる
・ アクティビティ計算では、ブロック分類に使用されるサンプルは少ないので、異なる正規化を使用する。
・ したがって、次の式が、アクティビティを計算する際に使用される:
・ avgVar[x][y]=varTab[Clip3(0, 15, (sumOfHV[x>>2][y>>2]*Ac)>>(3+BitDepthY))]、ここで、Acの値は、仮想境界付近のブロックに対して96であり、他のブロックに対しては64である。
使用されるアクティビティ計算は、次のように修正される:
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*Ac)>>(3+BitDepthY))]、ここで、Acの値は、仮想境界付近のブロックに対して96であり、他のブロックに対しては64である。
代替的に、ラインGから始まるブロックのブロック分類については、ラインD、E、F、Gのみが使用される。ラインIは、分類にさらに使用され得るが、一例において、2つのラインをセットとしてセット毎に勾配を計算するが、これはラインIを分類に含めることを面倒にする。
第2の解決方法は、単純なパディングを使用することである。ラインJは、ラインK、L、Mにパディングされ、次いで、Dから始まってMまでのラインは、ブロック分類に使用され得る。
図9b、図22b、および図18b(4×4ブロックがVBより下にある場合)において、ラインKから始まるブロックに対するブロック分類は、ラインK、L、M、N、O、P、Qを使用する。ラインKに属すサンプルの勾配計算は、上にもう1ライン必要とするので、したがってラインKはラインJにパディングされる。使用されるアクティビティ計算は、次のように修正される:avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*Ac)>>(3+BitDepthY))]、ここで、Acの値は、仮想境界付近のブロックに対して96であり、他のブロックに対しては64である。
一実装形態において、
VB(図18a)のすぐ上の4×4ブロックのブロック分類について:
・ 分類においてVBより上のサンプルのみを使用する(EからHまでのライン内のサンプル)
・ ラインIおよびJは、VTM-3.0では一緒に考えられ、したがってラインHまでしか使用されない。
・ ラインJをラインKにパディングしてラインIおよびJも分類に使用する
VB(図18b)のすぐ下の4×4ブロックのブロック分類について:
・ 分類においてVBより下のサンプルのみを使用する(PからMまでのライン内のサンプル)
・ ラインKおよびLは、VTM-3.0では一緒に考えられ、したがってラインMまでしか使用されない。
・ ラインKをラインJにパディングしてラインIおよびJも分類に使用する
代替的に、ラインKから始まるブロックのブロック分類については、ラインM、N、O、P、Qのみが使用される。ラインLは、分類にさらに使用され得るが、一例において、2つのラインをセットとしてセット毎に勾配を計算するが、これはラインLを分類に含めることを面倒にする。
第2の解決方法は、単純なパディングを使用することである。ラインKは、ラインJ、I、Hにパディングされ、次いで、Hから始まってQまでのラインは、ブロック分類に使用され得る。
解決方法2(対称切り捨てALFブロック分類)
図10に示されているように、ALFルーマラインバッファ(対称バリアント)を回避するための修正済みALF分類を参照する実装形態が開示されており、対称切り捨てALFブロック分類は、所与のブロックを分類するために内側の4サンプル(a、b、c、d)のみを使用する。
一例において、
解決方法1:
VB(図10a)のすぐ上の4×4ブロックのブロック分類について:
分類においてVBより上のサンプルのみを使用する。主にサンプルa、b、c、dが使用される。
VB(図10b)のすぐ下の4×4ブロックのブロック分類について:
分類においてVBより下のサンプルのみを使用する。主にサンプルa、b、c、dが使用される。
図10aでは、ラインGから始まるブロックについて、ラインGおよびIに属すサンプル(サンプルa、b、c、d)のみが勾配計算に使用される。この場合、追加のパディングは必要ない。同様に図10bでは、ラインKから始まるブロックについて、ラインLおよびMに属すサンプル(サンプルa、b、c、d)のみが勾配計算に使用される。この場合、追加のパディングは必要ない。この解決方法は、勾配が対称的なブロック形状を使用して計算されるという利点を有しており、これは、特にピクチャの内容が所与のローカルウィンドウ内で頻繁に変化するときに主観的な画質にとって有利となり得る。また、この解決方法は、4つのサンプル(a、b、c、d)のみを使用して勾配を計算するので計算的な複雑さも低い。
図11は、6ラインのALFルーマラインバッファ(2つの追加ラインはALFブロック分類に使用できる)を回避するために修正済みALF分類を参照する実装形態を開示しており、ALFブロック分類がSAOフィルタリング済みサンプルを記憶することができるラインバッファの2つの余分なラインを使用することも可能である特別な場合を示している。この場合、ALFブロック分類は、ラインGおよびラインKから始まるブロックに対する仮想境界より上および下の2つの追加のラインをそれぞれ使用することも可能である。
一例において、
解決方法1:
VB(図11の左部分図)のすぐ上の4×4ブロックのブロック分類について:
VBより下のSAOフィルタリング済みラインK、Lが、さらに使用され得る
VB(図11の右部分図)のすぐ下の4×4ブロックのブロック分類について:
VBより上のSAOフィルタリング済みラインI、Jが、さらに使用され得る
別の例では、
解決方法2:
VB(図11の左部分図)のすぐ上の4×4ブロックのブロック分類について:
ラインLをラインMにパディングする
VB(図11の右部分図)のすぐ下の4×4ブロックのブロック分類について:
ラインIをラインHにパディングする
仮想境界が4ラインであるときの修正済みALFフィルタリング
図12aおよび図12bは、ALFルーマラインバッファを回避するための修正済みALFフィルタリングを参照する実装形態を開示している。ラインH、J、I(仮想境界より上の)およびラインK、L、M(仮想境界より下の)のフィルタリングのために、7×7ルーマフィルタの歪んだバージョンが使用される。
フィルタは、仮想境界より上および下にある係数を対称的に破棄する。たとえば、ラインMのフィルタリングについては、係数c0は仮想境界より上にあり、ラインHのフィルタリングについてはその逆である。したがって、解決方法1に対するこの場合には、破棄された係数c0は、直に垂直である隣接する係数に加えられる。したがって、2'=c2+c0である。解決方法2では、破棄された係数は、中心係数に加えられ、その結果、c12'=c12+2*c0となる。
同様に、ラインLおよびラインIフィルタリングについても、修正済み係数値は解決方法1に対するものである。
c5'=c5+c1
c6'=c6+c2+c0
c7'=c7+c3
解決方法2について:c12'=c12+2*c0+2*c1+2*c2+2*c3である。
同様に、ラインJおよびラインKフィルタリングについても、修正済み係数値は解決方法1に対するものである。
c10'=c10+c4+c8
c11'=c11+c5+c7+c1+c3
c12'=c12+2*c6+2*c2+2*c0
この解決方法は、図21に示されているように、対称パディングとして扱うこともできる。図21aに示されているように、ラインMのフィルタリングについては、ラインKがラインJにパディングされ、ラインJがラインKにパディングされる。
図21bに示されているように、ラインLのフィルタリングについては、ラインKはラインJおよびラインIにパディングされる。同様に、ラインIのフィルタリングについては、ラインJがラインKおよびラインLにパディングされる。
図21cに示されているように、ラインKのフィルタリングについては、ラインKはラインJ、I、およびHにパディングされる。同様に、ラインJのフィルタリングについては、ラインJは、ラインK、L、およびMにパディングされる。
上で説明されているような類似のプロセスも、クロマALFフィルタリングに対して実行される。
以下に、解決方法1に対するシンタックス指定の変更点が与えられる。
2.1 概要
このプロセスの入力は、適応ループフィルタrecPictureL、recPictureCb、およびrecPictureCrの前の再構成済みピクチャサンプル配列である。
このプロセスの出力は、適応ループフィルタalfPictureL、alfPictureCb、およびalfPictureCrの後の修正された再構成済みピクチャサンプル配列である。
適応ループフィルタalfPictureL、alfPictureCb、およびalfPictureCrの後の修正された再構成済みピクチャサンプル配列内のサンプル値は、それぞれ、適応ループフィルタrecPictureL、recPictureCb、およびrecPictureCrの前の再構成済みピクチャサンプル配列内のサンプル値に等しくなるように初期設定される。
tile_group_alf_enabled_flagの値が1に等しいときに、ルーマコーディングツリーブロック配置(rx,ry)を有するすべてのコーディングツリーユニットについて、rx=0..PicWidthInCtbs-1およびry=0..PicHeightInCtbs-1として、次が適用される。
alf_ctb_flag[0][rx][ry]の値が1に等しいときに、2.2節において指定されているようなルーマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureL、alfPictureL、および(rx<<CtbLog2SizeY,ry<<CtbLog2SizeY)に等しくなるように設定されているルーマコーディングツリーブロック配置(xCtb,yCtb)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureLである。
alf_ctb_flag[1][rx][ry]の値が1に等しいときに、2.4節において指定されているようなクロマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureCbに等しくなるように設定されたrecPicture、alfPictureCbに等しくなるように設定されたalfPicture、および(rx<<(CtbLog2SizeY-1),ry<<(CtbLog2SizeY-1))に等しくなるように設定されたクロマコーディングツリーブロック配置(xCtbC,yCtbC)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureCbである。
alf_ctb_flag[2][rx][ry]の値が1に等しいときに、2.4節において指定されているようなクロマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureCrに等しくなるように設定されたrecPicture、alfPictureCrに等しくなるように設定されたalfPicture、および(rx<<(CtbLog2SizeY-1),ry<<(CtbLog2SizeY-1))に等しくなるように設定されたクロマコーディングツリーブロック配置(xCtbC,yCtbC)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureCrである。
2.2 ルーマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
適応ループフィルタプロセスの前の再構成済みルーマピクチャサンプル配列recPictureL、
フィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureL、
現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)。
この処理の出力は、修正されフィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureLである。
フィルタインデックスの節2.3の導出プロセスは、配置(xCtb,yCtb)および再構成済みルーマピクチャサンプル配列recPictureLを入力とし、x,y=0..CtbSizeY-1であるfiltIdx[x][y]およびtransposeIdx[x][y]を出力として、呼び出される。
フィルタリングされた再構成済みルーマサンプルalfPictureL[x][y]の導出のために、現在のルーマコーディングツリーブロックrecPictureL[x][y]の内側の各再構成済みルーマサンプルは、x,y=0..CtbSizeY-1として次のようにフィルタリングされる。
filtIdx[x][y]によって指定されたフィルタに対応するルーマフィルタ係数f[j]の配列は、j=0..12として、次のように導出される。
f[j]=AlfCoeffL[filtIdx[x][y]][j]
ルーマフィルタ係数filterCoeffは、transposeIdx[x][y]に応じて次のように導出される。
transposeIndex[x][y]==1の場合、
filterCoeff[]={f[9],f[4],f[10],f[8],f[1],f[5],f[11],f[7],f[3],f[0],f[2],f[6],f[12]}
そうでなければ、transposeIndex[x][y]==2の場合、
filterCoeff[]={f[0],f[3],f[2],f[1],f[8],f[7],f[6],f[5],f[4],f[9],f[10],f[11],f[12]}
そうでなければ、transposeIndex[x][y]==3の場合、
filterCoeff[]={f[9],f[8],f[10],f[4],f[3],f[7],f[11],f[5],f[1],f[0],f[2],f[6],f[12]}
そうでなければ、
filterCoeff[]={f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9],f[10],f[11],f[12]}
ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプル(x,y)の各々に対する配置(hx,vy)は、次のように導出される。
hx=Clip3(0,pic_width_in_luma_samples-1,xCtb+x)
vy=y
以下の表2-2aに示されているように、フィルタ入力サンプル位置オフセットr=0...6は、ルーマサンプル位置yに応じて導出される。
Figure 2023511206000018
変数sumは、次のように導出される。
sum=filterCoeff[0]*(recPictureL[hx, vy+r5 ]+recPictureL[hx, vy-r6 ])+
filterCoeff[1]*(recPictureL[hx+1, vy+r3]+recPictureL[hx-1, vy - r4 ])+
filterCoeff[2]*(recPictureL[hx, vy+r3 ]+recPictureL[hx, vy - r4 ])+
filterCoeff[3]*(recPictureL[hx-1, vy+r3 ]+recPictureL[hx+1, vy - r4])+
filterCoeff[4]*(recPictureL[hx+2, vy+r1 ]+recPictureL[hx-2, vy - r2 ])+
filterCoeff[5]*(recPictureL[hx+1, vy+r1 ]+recPictureL[hx-1, vy - r2 ])+
filterCoeff[6]*(recPictureL[hx, vy+r1]+recPictureL[hx, vy - r2])+ (8-1155)
filterCoeff[7]*(recPictureL[hx-1, vy+r1 ]+recPictureL[hx+1, vy - r2])+
filterCoeff[8]*(recPictureL[hx-2, vy+r1 ]+recPictureL[hx+2, vy - r2])+
filterCoeff[9]*(recPictureL[hx+3, vy]+recPictureL[hx-3, vy])+
filterCoeff[10]*(recPictureL[hx+2, vy]+recPictureL[hx-2, vy])+
filterCoeff[11]*(recPictureL[hx+1, vy]+recPictureL[hx-1, vy])+
filterCoeff[12]*recPictureL[hx, vy]
sum=(sum+64)>>7
修正されフィルタリングされた再構成済みルーマピクチャサンプルalfPictureL[xCtb+x][yCtb+y]は、次のように導出される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0, (1<<BitDepthY)-1, sum)。
2.3 ルーマサンプルに対するALF転置およびフィルタインデックスの導出プロセス
このプロセスの入力は、以下の通りである。
現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)、
適応ループフィルタプロセスの前の再構成済みルーマピクチャサンプル配列recPictureL。
このプロセスの出力は、以下の通りである。
x,y=0..CtbSizeY-1として、分類フィルタインデックス配列filtIdx[x][y]、
x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプル(x,y)の各々に対する配置(hx,vy)は、次のように導出される。
hx=Clip3(0,pic_width_in_luma_samples-1,x)
yCtb+CtbSizeY>=pic_height_in_luma_samplesならば
vy=Clip3(0,pic_height_in_luma_samples-1,y)
そうでなければ、y<(CtbSizeY-4)の場合、
vy=Clip3(0, yCtb+CtbSizeY-5, yCtb+y)
そうでなければ、
vy=Clip3(yCtb+CtbSizeY - 4, pic_height_in_luma_samples - 1, yCtb+y)。
分類フィルタインデックス配列fltIdxおよび転置インデックス配列transposeIdxは、次の順序付けられたステップで導出される。
x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は、次のように導出される。
xおよびyが両方とも偶数であるか、またはxおよびyが両方とも奇数である場合には、次が適用される。
filtH[x][y]=Abs((recPicture[hxCtb+x, vyCtb+y]<<1)-recPicture[hxCtb+x-1, vyCtb+y]- recPicture[hxCtb+x+1, vyCtb+y])
filtV[x][y]=Abs((recPicture[hxCtb+x, vyCtb+y]<<1)-recPicture[hxCtb+x, vyCtb+y-1]- recPicture[hxCtb+x, vyCtb+y+1])
filtD0[x][y]=Abs((recPicture[hxCtb+x, vyCtb+y]<<1)-recPicture[hxCtb+x-1, vyCtb+y-1]-recPicture[hxCtb+x+1, vyCtb+y+1])
filtD1[x][y]=Abs((recPicture[hxCtb+x, vyCtb+y]<<1)-recPicture[hxCtb+x+1, vyCtb+y-1]-recPicture[hxCtb+x-1, vyCtb+y+1])
そうでなければ、filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は0に等しくなるように設定される。
x,y=0..(CtbSizeY-1)>>2として、変数varTempH1[x][y]、varTempV1[x][y]、varTempD01[x][y]、varTempD11[x][y]、およびvarTemp[x][y]は、次のように導出される。
(y<<2)==CtbSizeY-8およびyCtb+CtbSizeY<pic_height_in_luma_samples-1ならば
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-2..3
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-2..3
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-2..3
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-2..3
変数Acは96に設定される
そうでなければ、(y<<2)==CtbSizeY-4およびyCtb+CtbSizeY<pic_height_in_luma_samples-1ならば
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-0..5
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-0..5
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=0..5
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j]、i=-2..5およびj=-0..5
変数Acは96に設定される
そうでなければ、
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j]、i,j=-2..5
sumOfHV[x][y]=sumH[x][y]+sumV[x][y](8-1168)
変数Acは64に設定される
x,y=-1..CtbSizeY-1として、変数dir1[x][y]、dir2[x][y]、およびdirS[x][y]は、次のように導出される。
変数hv1、hv0、dirHVは、次のように導出される。
sumV[x>>2][y>>2]がsumH[x>>2][y>>2]より大きい場合、次が適用される。
hv1=sumV[x>>2][y>>2]
hv0=sumH[x>>2][y>>2]
dirHV=1、
そうでなければ、次が適用される。
hv1=sumH[x>>2][y>>2]
hv0=sumV[x>>2][y>>2]
dirHV=3
変数d1、d0、dirDは、次のように導出される。
sumD0[x>>2][y>>2]がsumD1[x>>2][y>>2]より大きい場合、次が適用される。
d1=sumD0[x>>2][y>>2]
d0=sumD1[x>>2][y>>2]
dirD=0、
そうでなければ、次が適用される。
d1=sumD1[x>>2][y>>2]
d0=sumD0[x>>2][y>>2]
dirD=2
変数hvd1、hvd0は、次のように導出される。
hvd1=(d1*hv0>hv1*d0) ? d1:hv1
hvd0=(d1*hv0>hv1*d0) ? d0:hv0
変数dirS[x][y]、dir1[x][y]、およびdir2[x][y]は、次のように導出される。
dir1[x][y]=(d1*hv0>hv1*d0) ? dirD:dirHV
dir2[x][y]=(d1*hv0>hv1*d0) ? dirHV:dirD
dirS[x][y]=(hvd1>2*hvd0) ? 1:((hvd1*2>9*hvd0) ? 2:0)
x,y=0..CtbSizeY-1として、変数avgVar[x][y]は、次のように導出される。
varTab[]={0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4}
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y >>2]*Ac)>>(3+BitDepthY))]。
x=y=0..CtbSizeY-1として、分類フィルタインデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、次のように導出される。
transposeTable[]={0, 1, 0, 2, 2, 3, 1, 3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくないときに、filtIdx[x][y]は次のように修正される。
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5。
2.4 クロマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
適応ループフィルタプロセスの前の再構成済みクロマピクチャサンプル配列recPicture、
フィルタリングされた再構成済みクロマピクチャサンプル配列alfPicture、
現在のピクチャの左上サンプルに関する現在のクロマコーディングツリーブロックの左上サンプルを指定するクロマ配置(xCtbC,yCtbC)。
この処理の出力は、修正されフィルタリングされた再構成済みクロマピクチャサンプル配列alfPictureである。
現在のクロマコーディングツリーブロックのサイズctbSizeCは、次のように導出される。
ctbSizeC=CtbSizeY/SubWidthC。
フィルタリングされた再構成済みクロマサンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリーブロックrecPicture[x][y]の内側の各再構成済みクロマサンプルは、x,y=0..ctbSizeC-1として次のようにフィルタリングされる。
クロマサンプルの所与の配列recPictureの内側の対応するクロマサンプル(x,y)の各々に対する配置(hx,vy)は、次のように導出される。
hx=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x)
vy=y
以下の表2.4に示されているように、フィルタ入力サンプル位置オフセットr=0...4は、クロマサンプル位置yに応じて導出される。
Figure 2023511206000019
変数sumは、次のように導出される。
sum=AlfCoeffC[0] * (recPicture[hx, vy+r3]+recPicture[hx, vy - r4])+
AlfCoeffC[1] * (recPicture[hx+1, vy+r1]+recPicture[hx-1, vy - r2])+
AlfCoeffC[2] * (recPicture[hx, vy+r1]+recPicture[hx, vy - r2])+
AlfCoeffC[3] * (recPicture[hx-1, vy+r1]+recPicture[hx+1, vy - r2])+
AlfCoeffC[4]*(recPicture[hx+2,vy]+recPicture[hx-2,vy])+
AlfCoeffC[5]*(recPicture[hx+1,vy]+recPicture[hx-1,vy])+
AlfCoeffC[6]*recPicture[hx,vy]
sum=(sum+64)>>7
修正されフィルタリングされた再構成済みクロマピクチャサンプルalfPicture[xCtbC+x][yCtbC+y]は、次のように導出される。
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum)。
解決方法2について:
c12'=c12+2*c0+2*c1+2*c2+2*c3+2*c4+2*c5+2*c6+2*c7+2*c8
である。
ITU JVET-Q0044によるALFフィルタリングプロセスは、次の通りである。
8.8.5 適応ループフィルタプロセス
8.8.5.1 概要
このプロセスの入力は、適応ループフィルタrecPictureLの前の再構成済みピクチャサンプル配列であり、ChromaArrayTypeが0に等しくないときには、配列recPictureCbおよびrecPictureCrである。
このプロセスの出力は、適応ループフィルタalfPictureLの後の修正された再構成済みピクチャサンプル配列であり、ChromaArrayTypeが0に等しくないときには、配列alfPictureCbおよびalfPictureCrである。
適応ループフィルタalfPictureLの後の修正された再構成済みピクチャサンプル配列、およびChromaArrayTypeが0に等しくないときには、配列alfPictureCb、およびalfPictureCr内のサンプル値は、それぞれ、適応ループフィルタrecPictureLの前の再構成済みピクチャサンプル配列、およびChromaArrayTypeが0に等しくないときには、配列recPictureCbおよびrecPictureCr内のサンプル値に等しくなるように初期設定される。
ルーマコーディングツリーブロック配置(rx,ry)を有するすべてのコーディングツリーユニットについて、rx=0..PicWidthInCtbsY-1およびry=0..PicHeightInCtbsY-1として、次が適用される。
alf_ctb_flag[0][rx][ry]が1に等しいときに、8.8.5.2節において指定されているようなルーマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureL、alfPictureL、および(rx<<CtbLog2SizeY,ry<<CtbLog2SizeY)に等しくなるように設定されているルーマコーディングツリーブロック配置(xCtb,yCtb)を入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureLである。
ChromaArrayTypeが0に等しくなく、alf_ctb_flag[1][rx][ry]が1に等しいときに、8.8.5.4節において指定されているようなクロマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureCbに等しくなるように設定されたrecPicture、alfPictureCbに等しくなるように設定されたalfPicture、((rx<<CtbLog2SizeY)/SubWidthC,(ry<<CtbLog2SizeY)/SubHeightC)に等しくなるように設定されたクロマコーディングツリーブロック配置(xCtbC,yCtbC)、およびalf_ctb_filter_alt_idx[0][rx][ry]に等しくなるように設定された代替的クロマフィルタインデックスaltIdxを入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureCbである。
ChromaArrayTypeが0に等しくなく、alf_ctb_flag[2][rx][ry]が1に等しいときに、8.8.5.4節において指定されているようなクロマサンプルに対するコーディングツリーブロックフィルタリングプロセスは、recPictureCrに等しくなるように設定されたrecPicture、alfPictureCrに等しくなるように設定されたalfPicture、((rx<<CtbLog2SizeY)/SubWidthC,(ry<<CtbLog2SizeY)/SubHeightC)に等しくなるように設定されたクロマコーディングツリーブロック配置(xCtbC,yCtbC)、およびalf_ctb_filter_alt_idx[0][rx][ry]に等しくなるように設定された代替的クロマフィルタインデックスaltIdxを入力として、呼び出され、出力は、修正されたフィルタリング済みピクチャalfPictureCrである。
8.8.5.2 ルーマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
適応ループフィルタプロセスの前の再構成済みルーマピクチャサンプル配列recPicture、
- フィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureL、
- 現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)。
この処理の出力は、修正されフィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureLである。
フィルタインデックスの節8.8.5.3の導出プロセスは、配置(xCtb,yCtb)および再構成済みルーマピクチャサンプル配列recPictureを入力とし、x,y=0..CtbSizeY-1であるfiltIdx[x][y]およびtransposeIdx[x][y]を出力として、呼び出される。
フィルタリングされた再構成済みルーマサンプルalfPictureL[x][y]の導出のために、現在のルーマコーディングツリーブロックrecPicture[x][y]の内側の各再構成済みルーマサンプルは、x,y=0..CtbSizeY-1として次のようにフィルタリングされる。
filtIdx[x][y]によって指定されたフィルタに対応するルーマフィルタ係数f[j]の配列およびルーマクリッピング値c[j]の配列は、j=0..11として、次のように導出される。
AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16より小さい場合、次が適用される:
i=AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] (1411)
f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j] (1412)
c[j]=2BitDepth (1413)
そうでなければ、(AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16以上である場合、次が適用される:
i=slice_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]-16] (1414)
f[j]=AlfCoeffL[i][filtIdx[x][y]][j] (1415)
c[j]=AlfClipL[i][filtIdx[x][y]][j] (1416)
ルーマフィルタ係数およびクリッピング値インデックスidxは、transposeIdx[x][y]に応じて次のように導出される。
transposeIndex[x][y]が1に等しい場合、次が適用される:
idx[]={9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6} (1417)
そうでなければ、transposeIndex[x][y]が2に等しい場合、次が適用される:
idx[]={0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11} (1418)
そうでなければ、transposeIndex[x][y]が3に等しい場合、次が適用される:
idx[]={9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6} (1419)
そうでなければ、次が適用される。
idx[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} (1420)
i,j=-3..3に対して、ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプル(x,y)の各々に対する配置(hx+i, vy+j)は、次のように導出される。
hx+i=Clip3(0, pic_width_in_luma_samples-1, xCtb+x+i) (1421)
vy+j=Clip3(0, pic_height_in_luma_samples-1, yCtb+y+j) (1422)
変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagは、(xCtb, yCtb)および(x, y)を入力として節8.8.5.5で指定されているようなALF境界位置導出プロセスを呼び出すことによって導出される。
変数hx+iおよびvy+jは、(xCtb, yCtb)、(hx+i, vy+j)、0、clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagを入力として節8.8.5.6で指定されているようなALFサンプルパディングプロセスを呼び出すことによって修正される。
変数applyAlfLineBufBoundaryは、次のように導出される。
現在のコーディングツリーブロックの底部境界が、現在のピクチャの底部境界であり、pic_height_in_luma_samples-yCtb<=CtbSizeY-4である場合に、applyAlfLineBufBoundaryは0に等しくなるように設定される:
そうでなければ、applyAlfLineBufBoundaryは1に等しくなるように設定される。
垂直サンプル位置オフセットy1、y2、およびy3は、垂直ルーマサンプル位置yおよびapplyAlfLineBufBoundaryに従って表43において指定されている。
変数currは、次のように導出される。
curr=recPicture[hx][vy] (1423)
変数sumは、次のように導出される。
sum=f[idx[0]] * (Clip3(-c[idx[0]],c[idx[0]], recPicture[hx][vy+y3]-curr) +
Clip3(-c[idx[0]],c[idx[0]], recPicture[hx][vy-y3]-curr))+
f[idx[1]] * (Clip3(-c[idx[1]],c[idx[1]], recPicture[hx+1][vy+y2]-curr) +
Clip3(-c[idx[1]],c[idx[1]], recPicture[hx-1][vy-y2]-curr)) +
f[idx[2]] * (Clip3(-c[idx[2]],c[idx[2]], recPicture[hx][vy+y2]-curr) +
Clip3(-c[idx[2]],c[idx[2]], recPicture[hx][vy-y2]-curr)) +
f[idx[3]] * (Clip3(-c[idx[3]],c[idx[3]], recPicture[hx-1][vy+y2]-curr) +
Clip3(-c[idx[3]],c[idx[3]], recPicture[hx+1][vy-y2]-curr)) +
f[idx[4]] * (Clip3(-c[idx[4]],c[idx[4]], recPicture[hx+2][vy+y1]-curr) +
Clip3(-c[idx[4]],c[idx[4]], recPicture[hx-2][vy-y1]-curr)) +
f[idx[5]] * (Clip3(-c[idx[5]],c[idx[5]], recPicture[hx+1][vy+y1]-curr) +
Clip3(-c[idx[5]],c[idx[5]], recPicture[hx-1][vy-y1]-curr)) +
f[idx[6]] * (Clip3(-c[idx[6]],c[idx[6]], recPicture[hx][vy+y1]-curr) +
Clip3(-c[idx[6]],c[idx[6]], recPicture[hx][vy-y1]-curr))+(1424)
f[idx[7]] * (Clip3(-c[idx[7]],c[idx[7]], recPicture[hx-1][vy+y1]-curr) +
Clip3(-c[idx[7]],c[idx[7]], recPicture[hx+1][vy-y1]-curr)) +
f[idx[8]] * (Clip3(-c[idx[8]],c[idx[8]], recPicture[hx-2][vy+y1]-curr) +
Clip3(-c[idx[8]],c[idx[8]], recPicture[hx+2][vy-y1]-curr)) +
f[idx[9]] * (Clip3(-c[idx[9]],c[idx[9]], recPicture[hx+3][vy]-curr) +
Clip3(-c[idx[9]],c[idx[9]], recPicture[hx-3][vy]-curr)) +
f[idx[10]] * (Clip3(-c[idx[10]],c[idx[10]],recPicture[hx+2][vy]-curr) +
Clip3(-c[idx[10]],c[idx[10]],recPicture[hx-2][vy]-curr)) +
f[idx[11]] * (Clip3(-c[idx[11]],c[idx[11]],recPicture[hx+1][vy]-curr) +
Clip3(-c[idx[11]],c[idx[11]],recPicture[hx-1][vy]-curr))
sum=curr+((sum+64)>>7) (1425)
修正されフィルタリングされた再構成済みルーマピクチャサンプルalfPictureL[xCtb+x][yCtb+y]は、次のように導出される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0, (1<<BitDepth)-1, sum) (1426)
Figure 2023511206000020
8.8.5.3 ルーマサンプルに対するALF転置およびフィルタインデックスの導出プロセス
このプロセスの入力は、以下の通りである。
現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)、
適応ループフィルタプロセスの前の再構成済みルーマピクチャサンプル配列recPicture。
このプロセスの出力は、以下の通りである。
x,y=0..CtbSizeY-1として、分類フィルタインデックス配列filtIdx[x][y]、
- x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
x,y=0..(CtbSizeY-1)>>2として、変数ac[x][y]、sumH[x][y]、sumV[x][y]、sumD0[x][y]、sumD1[x][y]、およびsumOfHV[x][y]は、次のように導出される。
変数x4およびy4は、それぞれ、(x<<2)および(y<<2)として設定される。
変数minY、maxY、およびac[x][y]は、次のように導出される。
y4が(CtbSizeY-8)に等しく、次の条件のうちの1つが真である場合に、minYは-2に等しくなるように設定され、maxYは3に等しくなるように設定され、ac[x][y]は3に等しくなるように設定される。
現在のコーディングツリーブロックの底部境界は、ピクチャの底部境界であり、pic_height_in_luma_samples-yCtb>CtbSizeY-4である。
現在のコーディングツリーブロックの底部境界は、ピクチャの底部境界ではない。
そうでなければ、y4が(CtbSizeY-4)に等しく、次の条件のうちの1つが真である場合に、minYは0に等しくなるように設定され、maxYは5に等しくなるように設定され、ac[x][y]は3に等しくなるように設定される。
現在のコーディングツリーブロックの底部境界は、ピクチャの底部境界であり、pic_height_in_luma_samples-yCtb>CtbSizeY-4である。
現在のコーディングツリーブロックの底部境界は、ピクチャの底部境界ではない。
- そうでなければ、minYは-2に等しくなるように設定され、maxYは5に等しくなるように設定され、ac[x][y]は2に等しくなるように設定される。
- 変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagは、(xCtb, yCtb)および(x4, y4)を入力として節8.8.5.5で指定されているようなALF境界位置導出プロセスを呼び出すことによって導出される。
- i,j=-3..6に対して、ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプルの各々に対する配置(hx4+i, vy4+j)は、次のように導出される。
hx4+i=Clip3(0, pic_width_in_luma_samples-1, xCtb+x4+i) (1427)
vy4+j=Clip3(0, pic_height_in_luma_samples-1, yCtb+y4+j) (1428)
変数hx4+iおよびvy4+jは、(xCtb, yCtb)、(hx4+i, vy4+j)、0に等しくなるように設定されている変数isChroma、clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagを入力として節8.8.5.6で指定されているようなALFサンプルパディングプロセスを呼び出すことによって修正される。
i,j=-2..5として、変数filtH[i][j]、filtV[i][j]、filtD0[i][j]、およびfiltD1[i][j]は、次のように導出される。
iおよびjが両方とも偶数であるか、またはiおよびjが両方とも偶数でない場合に、次が適用される。
filtH[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+ i-1][vy4 +j] -recPicture[hx4+i+1][vy4+j]) (1429)
filtV[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i][vy4+j-1] -recPicture[hx4+i][vy4+j+1]) (1430)
filtD0[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i-1][vy4+j-1]-recPicture[hx4+i+1][vy4+j+1]) (1431)
filtD1[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i+1][vy4+j-1]-recPicture[hx4+i-1][vy4+j+1]) (1432)
そうでなければ、filtH[i][j]、filtV[i][j]、filtD0[i][j]、およびfiltD1[i][j]は0に等しくなるように設定される。
変数sumH[x][y]、sumV[x][y]、sumD0[x][y]、sumD1[x][y]、およびsumOfHV[x][y]は、次のように導出される。
sumH[x][y]=ΣiΣjfiltH[i][j]、i=-2..5, j=minY..maxY (1433)
sumV[x][y]=ΣiΣjfiltV[i][j]、i=-2..5, j=minY..maxY (1434)
sumD0[x][y]=ΣiΣjfiltD0[i][j]、i=-2..5, j=minY..maxY (1435)
sumD1[x][y]=ΣiΣjfiltD1[i][j]、i=-2..5, j=minY..maxY (1436)
sumOfHV[x][y]=sumH[x][y]+sumV[x][y] (1437)
分類フィルタインデックス配列fltIdxおよび転置インデックス配列transposeIdxは、次のステップで導出される。
1. x,y=0..CtbSizeY-1として、変数dir1[x][y]、dir2[x][y]、およびdirS[x][y]は、次のように導出される。
- 変数hv1、hv0、dirHVは、次のように導出される。
- sumV[x>>2][y>>2]がsumH[x>>2][y>>2]より大きい場合、次の式が適用される。
hv1=sumV[x>>2][y>>2] (1438)
hv0=sumH[x>>2][y>>2] (1439)
dirHV=1 (1440)
- そうでなければ、次が適用される。
hv1=sumH[x>>2][y>>2] (1441)
hv0=sumV[x>>2][y>>2] (1442)
dirHV=3 (1443)
- 変数d1、d0、dirDは、次のように導出される。
- sumD0[x>>2][y>>2]がsumD1[x>>2][y>>2]より大きい場合、次が適用される。
d1=sumD0[x>>2][y>>2] (1444)
d0=sumD1[x>>2][y>>2] (1445)
dirD=0 (1446)
- そうでなければ、次が適用される。
d1=sumD1[x>>2][y>>2] (1447)
d0=sumD0[x>>2][y>>2] (1448)
dirD=2 (1449)
- 変数hvd1、hvd0は、次のように導出される。
hvd1=(d1*hv0 > hv1*d0) ? d1:hv1 (1450)
hvd0=(d1*hv0 > hv1*d0) ? d0:hv0 (1451)
- 変数dirS[x][y]、dir1[x][y]、およびdir2[x][y]は、次のように導出される。
dir1[x][y]=(d1*hv0>hv1*d0) ? dirD:dirHV (1452)
dir2[x][y]=(d1*hv0>hv1*d0) ? dirHV:dirD (1453)
dirS[x][y]=(hvd1*2 > 9*hvd0) ? 2:((hvd1 > 2*hvd0) ? 1:0) (1454)
x,y=0..CtbSizeY-1として、変数avgVar[x][y]は、次のように導出される。
varTab[]={0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4} (1455)
avgVar[x][y]=varTab[Clip3(0, 15, (sumOfHV[x>>2][y>>2] * (1456)
ac[x>>2][y>>2])>>(BitDepth-1))]
x=y=0..CtbSizeY-1として、分類フィルタインデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、次のように導出される。
transposeTable[]={0, 1, 0, 2, 2, 3, 1, 3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくないときに、filtIdx[x][y]は次のように修正される。
filtIdx[x][y] +=(((dir1[x][y] & 0x1)<<1)+dirS[x][y]) * 5 (1457)
8.8.5.4 クロマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
- 適応ループフィルタプロセスの前の再構成済みクロマピクチャサンプル配列recPicture、
- フィルタリングされた再構成済みクロマピクチャサンプル配列alfPicture、
- 現在のピクチャの左上サンプルに関する現在のクロマコーディングツリーブロックの左上サンプルを指定するクロマ配置(xCtbC,yCtbC)、
- 代替的クロマフィルタインデックスaltIdx。
この処理の出力は、修正されフィルタリングされた再構成済みクロマピクチャサンプル配列alfPictureである。
現在のクロマコーディングツリーブロックの幅ctbWidthCおよび高さctbHeightCは、次のように導出される。
ctbWidthC=CtbSizeY/SubWidthC (1458)
ctbHeightC=CtbSizeY/SubHeightC (1459)
フィルタリングされた再構成済みクロマサンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリーブロックrecPicture[x][y]の内側の各再構成済みクロマサンプルは、x=0..ctbWidthC-1、y=0..ctbHeightC-1として次のようにフィルタリングされる。
- i,j=-2..2に対して、クロマサンプルの所与の配列recPictureの内側の対応するクロマサンプル(x,y)の各々に対する配置(hx+i, vy+j)は、次のように導出される。
hx+i=Clip3(0, pic_width_in_luma_samples / SubWidthC-1, xCtbC+x+i) (1460)
vy+j=Clip3(0, pic_height_in_luma_samples / SubHeightC-1, yCtbC+y+j) (1461)
- 変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagは、(xCtbC*SubWidthC, yCtbC*SubHeightC)および(x*SubWidthC, y*SubHeightC)を入力として節8.8.5.5で指定されているようなALF境界位置導出プロセスを呼び出すことによって導出される。
- 変数hx+iおよびvy+jは、(xCtb, yCtb)、(hx+i, vy+j)、1に等しくなるように設定されている変数isChroma、clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagを入力として節8.8.5.6で指定されているようなALFサンプルパディングプロセスを呼び出すことによって修正される。
- 変数applyAlfLineBufBoundaryは、次のように導出される。
- 現在のコーディングツリーブロックの底部境界が、現在のピクチャの底部境界であり、pic_height_in_luma_samples-(yCtbC*SubHeightC)<CtbSizeY-4である場合に、applyAlfLineBufBoundaryは0に等しくなるように設定される。
- そうでなければ、applyAlfLineBufBoundaryは1に等しくなるように設定される。
- 垂直サンプル位置オフセットy1およびy2は、垂直クロマサンプル位置yおよびapplyAlfLineBufBoundaryに従って表43において指定されている。
- 変数currは、次のように導出される。
curr=recPicture[hx][vy] (1462)
- クロマフィルタ係数f[j]の配列およびクロマクリッピング値c[j]の配列は、j=0..5として、次のように導出される。
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][altIdx][j] (1463)
c[j]=AlfClipC[slice_alf_aps_id_chroma][altIdx][j] (1464)
- 変数sumは、次のように導出される。
sum=f[0] * (Clip3(-c[0],c[0],recPicture[hx][vy+y2]-curr) +
Clip3(-c[0],c[0],recPicture[hx][vy-y2]-curr)) +
f[1] * (Clip3(-c[1],c[1],recPicture[hx+1][vy+y1]-curr) +
Clip3(-c[1],c[1],recPicture[hx-1][vy-y1]-curr)) +
f[2] * (Clip3(-c[2],c[2],recPicture[hx][vy+y1]-curr) +
Clip3(-c[2],c[2],recPicture[hx][vy-y1]-curr))+ (1465)
f[3] * (Clip3(-c[3],c[3],recPicture[hx-1][vy+y1]-curr) +
Clip3(-c[3],c[3],recPicture[hx+1][vy-y1]-curr)) +
f[4] * (Clip3(-c[4],c[4],recPicture[hx+2][vy]-curr) +
Clip3(-c[4],c[4],recPicture[hx-2][vy]-curr)) +
f[5] * (Clip3(-c[5],c[5],recPicture[hx+1][vy]-curr) +
Clip3(-c[5],c[5],recPicture[hx-1][vy]-curr))
sum=curr+((sum+64)>>7) (1466)
- 修正されフィルタリングされた再構成済みクロマピクチャサンプルalfPicture[xCtbC+x][yCtbC+y]は、次のように導出される。
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0, (1<<BitDepth)-1, sum) (1467)
Figure 2023511206000021
8.8.5.5 ALF境界位置導出プロセス
このプロセスの入力は、以下の通りである。
- 現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)、
- 現在のルーマコーディングツリーブロックの左上サンプルに関する現在のサンプルを指定するルーマ配置(x,y)。
このプロセスの出力は、以下の通りである。
- 左垂直境界位置clipLeftPos、
- 右垂直境界位置clipRightPos、
- 上水平境界位置clipTopPos、
- 下水平境界位置clipBottomPos、
- 左上境界フラグclipTopLeftFlag、
- 右下境界フラグclipBotRightFlag。
変数clipLeftPos、clipRightPos、clipTopPos、およびclipBottomPosは-128に等しくなるように設定される。
変数clipTopLeftFlagおよびclipBotRightFlagは両方とも0に等しくなるように設定される。
変数clipTopPosは、次のように修正される。
- y-(CtbSizeY-4)が0以上である場合、変数clipTopPosはyCtb+CtbSizeY-4に等しくなるように設定される。
- そうでなければ、VirtualBoundariesDisabledFlagが1に等しく、任意のn=0..VirtualBoundariesNumHor-1についてyCtb+y-VirtualBoundariesPosY[n]が0以上、3未満である場合、次が適用される:
clipTopPos=VirtualBoundariesPosY[n] (1468)
- そうでなければ、yが3より小さく、次の条件のうちの1つまたは複数が真である場合、変数clipTopPosはyCtbに等しくなるように設定される:
- 現在のコーディングツリーブロックの頂部境界は、タイルの頂部境界であり、loop_filter_across_tiles_enabled_flagは0に等しい。
- 現在のコーディングツリーブロックの頂部境界は、スライスの頂部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
- 現在のコーディングツリーブロックの頂部境界は、サブピクチャの頂部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]は0に等しい。
変数clipBottomPosは、次のように修正される。
- VirtualBoundariesDisabledFlagが1に等しく、任意のn=0..VirtualBoundariesNumHor-1についてVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1または0に等しくなく、VirtualBoundariesPosY[n]-yCtb-yが0より大きく5より小さい場合、次が適用される:
clipBottomPos=VirtualBoundariesPosY[n] (1469)
- そうでなければ、CtbSizeY-4-yが0より大きく、5より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しくなるように設定される。
- そうでなければ、CtbSizeY-yが5より小さく、次の条件のうちの1つまたは複数が真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しくなるように設定される:
- 現在のコーディングツリーブロックの底部境界は、タイルの底部境界であり、loop_filter_across_tiles_enabled_flagは0に等しい。
- 現在のコーディングツリーブロックの底部境界は、スライスの底部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
- 現在のコーディングツリーブロックの底部境界は、サブピクチャの底部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]は0に等しい。
変数clipLeftPosは、次のように修正される。
- VirtualBoundariesDisabledFlagが1に等しく、任意のn=0..VirtualBoundariesNumVer-1についてxCtb+x-VirtualBoundariesPosX[n]が0以上、3未満である場合、次が適用される:
clipLeftPos=VirtualBoundariesPosX[n] (1470)
- そうでなければ、xが3より小さく、次の条件のうちの1つまたは複数が真である場合、変数clipLeftPosはxCtbに等しくなるように設定される:
- 現在のコーディングツリーブロックの左境界は、タイルの左境界であり、loop_filter_across_tiles_enabled_flagは0に等しい。
- 現在のコーディングツリーブロックの左境界は、スライスの左境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
- 現在のコーディングツリーブロックの左境界は、サブピクチャの左境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]は0に等しい。
変数clipRightPosは、次のように修正される。
VirtualBoundariesDisabledFlagが1に等しく、任意のn=0..VirtualBoundariesNumVer-1についてVirtualBoundariesPosX[n]-xCtb-xが0より大きく、5より小さい場合、次が適用される:
clipRightPos=VirtualBoundariesPosX[n] (1471)
そうでなければ、CtbSizeY-xが5より小さく、次の条件のうちの1つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しくなるように設定される:
現在のコーディングツリーブロックの右境界は、タイルの右境界であり、loop_filter_across_tiless_enabled_flagは0に等しい。
現在のコーディングツリーブロックの右境界は、スライスの右境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
現在のコーディングツリーブロックの右境界は、サブピクチャの右境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]は0に等しい。
変数clipTopLeftFlagおよびclipBotRightFlagは、次のように修正される:
ルーマ位置(xCtb,yCtb)をカバーするコーディングツリーブロックおよびルーマ位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリーブロックが異なるスライスに属し、loop_filter_across_slices_enabled_flagが0に等しい場合、clipTopLeftFlagは1に等しくなるように設定される。
ルーマ位置(xCtb,yCtb)をカバーするコーディングツリーブロックおよびルーマ位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリーブロックが異なるスライスに属し、loop_filter_across_slices_enabled_flagが0に等しい場合、clipBotRightFlagは1に等しくなるように設定される。
8.8.5.6 ALFサンプルパディングプロセス
このプロセスの入力は、以下の通りである。
現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)、
現在のピクチャの左上サンプルに関する隣接するサンプルを指定するルーマ配置(x,y)、
色成分がクロマ成分であるか否かを指定するフラグisChroma、
左垂直境界位置clipLeftPos、
右垂直境界位置clipRightPos、
上水平境界位置clipTopPos、
下水平境界位置clipBottomPos、
左上境界フラグclipTopLeftFlag、
右下境界フラグclipBotRightFlag。
このプロセスの出力は、以下の通りである。
現在のピクチャの左上サンプルに関する隣接するサンプルを指定する修正済みルーマ配置(x,y)
変数picWidth、picHeight、xCtbCur、yCtbCur、CtbSizeHor、CtbSizeVer、topBry、botBry、leftBry、およびrightBryは次のように導出される。
picWidth=isChroma ? pic_width_in_luma_samples / SubWidthC : pic_width_in_luma_samples (1472)
picHeight=isChroma ? pic_height_in_luma_samples / SubHeightC : pic_height_in_luma_samples (1473)
xCtbCur=isChroma ? xCtb / SubWidthC : xCtb (1474)
yCtbCur=isChroma ? yCtb / SubHeightC : yCtb (1475)
ctbSizeHor=isChroma ? CtbSizeY / SubWidthC : CtbSizeY (1476)
ctbSizeVer=isChroma ? CtbSizeY / SubHeightC : CtbSizeY (1477)
topBryPos=isChroma ? clipTopPos / SubHeightC : clipTopPos (1478)
botBryPos=isChroma ? clipBottomPos / SubHeightC : clipBottomPos (1479)
leftBryPos=isChroma ? clipLeftPos / SubWidthC : clipLeftPos (1480)
rightBryPos=isChroma ? clipRightPos / SubWidthC : clipRightPos (1481)
変数(x,y)は、次のように修正される。
topBryPosが0以上であるときに、次が適用される:
y=Clip3(topBryPos, picHeight-1, y) (1482)
botBryPosが0以上であるときに、次が適用される:
y=Clip3(0, botBryPos-1, y) (1483)
leftBryPosが0以上であるときに、次が適用される:
x=Clip3(leftBryPos, picWidth-1, x) (1484)
rightBryPosが0以上であるときに、次が適用される:
x=Clip3(0, rightBryPos-1, x) (1485)
(x, y)は、次の条件のうちのすべてが真である場合に、(xCtbCur, y)に等しくなるように設定される:
clipTopLeftFlagは真に等しい
topBryPosは0より小さく、leftBryPosは0より小さい
xはxCtbCurより小さく、yはyCtbCurより小さい
(x,y)は、次の条件のうちのすべてが真である場合に、(xCtbCur+CtbSizeHor-1, y)に等しくなるように設定される:
clipBotRightFlagは真に等しい
botBryPosは0より小さく、rightBryPosは0より小さい
xはxCtbCur+CtbSizeHor-1より大きく、yはyCtbCur+CtbSizeVer-1より大きい。
一例において、ITU JVET-Q0150では、ALFフィルタリングプロセスを、特にCTU境界において、修正することを提案している。
主な変更は、式1425、1467(上記の式を参照)ならびに表43および表44(上記の表を参照)への変更である。
JVET-Q0150において開示されているように、ALF仮想境界処理は、次のように指定される:
1. sum=curr+((sum+64)>>alfShiftY). (1425)
通常、Currは、現在フィルタリングされている中心ピクセル値を意味する。y1、y2、およびy3は、ALFフィルタリングで使用される垂直ルーマサンプル位置(y)である。CtbSizeyは、CTBサイズである。
Figure 2023511206000022
2. sum=curr+((sum+64)>>alfShiftC). (1466)
Figure 2023511206000023
式1425および1466において、ALFフィルタプロセスにおけるフィルタリング済み値は、現在の中心ピクセル(値yによって指定される)がALF仮想境界からどれだけ離れているかに依存する値(alfShiftYまたはalfShiftC)で除算される、または(右シフトされる)。通常、alfShiftYはルーマ成分に使用され、alfShiftCはクロマ成分に使用される。したがって、alfShiftYまたはalfShiftCの値は、それぞれルーマおよびクロマALFフィルタリングに対する表43、表44によるyの値に応じて、10または7のいずれかであり得る。
しかしながら、上記の2つの式によれば、右シフト値が7または10であっても、ALFフィルタリングプロセスで使用される丸め値は常に同じ(64)である。
本発明の実施形態では、ALFフィルタリングプロセスにおける右シフト値に対応する丸め値を使用することを提案した。この解決方法は、他のフィルタリング段階と比較されたときにALFフィルタリングが正確で一貫しているという利点をもたらす。
指定変更は、次の通りである。
1. sum=curr+((sum+roundY)>>alfShiftY) (1425)
Figure 2023511206000024
2. sum=curr+((sum+roundC)>>alfShiftC) (1466)
Figure 2023511206000025
いくつかの実装形態において、サンプルは、CTBの単位で処理される。各ルーマCTBの幅および高さの配列サイズは、サンプル数を単位とするCtbSizeYである。各クロマCTBに対する配列の幅および高さは、それぞれ、サンプル数を単位とする、CtbWidthCおよびCtbHeightCである。
2つの新しい変数roundYおよびroundCは、それぞれ、式1425および1466において使用される。値は、それぞれ、表43および表44において指定されている。
図25に示されているような一実装形態において、ピクチャのサンプル値をフィルタリングする方法が開示されており、この方法は以下を含む。
S2501:ピクチャのブロックに対する再構成済みサンプル値を取得する。
一例において、適応ループフィルタリングプロセスの入力は、適応ループフィルタrecPictureLの前の再構成済みピクチャサンプル配列であり、sps_chroma_format_idcが0に等しくないときには、配列recPictureCbおよびrecPictureCrである。
適応ループフィルタalfPictureLの後の修正された再構成済みピクチャサンプル配列、およびsps_chroma_format_idcが0に等しくないときには、配列alfPictureCb、およびalfPictureCr内のサンプル値は、それぞれ、適応ループフィルタrecPictureLの前の再構成済みピクチャサンプル配列、およびsps_chroma_format_idcが0に等しくないときには、配列recPictureCbおよびrecPictureCr内のサンプル値に等しくなるように初期設定される。
sps_chroma_format_idcで、ルーマサンプリングに関するクロマサンプリングを指定する。
Figure 2023511206000026
S2502:ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得する。
適応ループフィルタ(ALF)は、デコードプロセスの一部として適用されるフィルタリングプロセスであり、APSで伝達されるパラメータによって制御される。
適応パラメータセット(APS)は、スライスヘッダ内に見つかった0個またはそれ以上のシンタックス要素によって決定されるような0個またはそれ以上のスライスに適用されるシンタックス要素を含むシンタックス構造体である。
フィルタインデックスに対する導出プロセスは、配置(xCtb,yCtb)および再構成済みルーマピクチャサンプル配列recPictureを入力とし、x,y=0..CtbSizeY-1であるfiltIdx[x][y]およびtransposeIdx[x][y]を出力として、呼び出される。
ビットストリームは、ワイヤレスネットワークまたは有線ネットワークにより取得され得る。ビットストリームは、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、マイクロ波、WIFI、Bluetooth、LTE、もしくは5Gなどのワイヤレス技術を使用してウェブサイト、サーバ、または他のリモートソースから伝送され得る。
一実施形態において、ビットストリームは、1つまたは複数のコーディングされたビデオシーケンス(CVS)を形成するアクセスユニット(AU)のシーケンスの表現を形成する、ネットワーク抽象化レイヤ(NAL)ユニットストリームまたはバイトストリームの形態の、ビットのシーケンスである。
いくつかの実施形態において、デコードプロセスのために、デコーダ側は、ビットストリームを読み込み、ビットストリームからデコード済みピクチャを導出し、エンコードプロセスのために、エンコーダ側はビットストリームを生成する。
通常、ビットストリームは、シンタックス構造によって形成されるシンタックス要素を含む。
シンタックス要素:ビットストリームで表されるデータの要素。
シンタックス構造:指定された順序でビットストリーム内に一緒に存在する0個またはそれ以上のシンタックス要素。
特定の一例において、ビットストリーム形式は、ネットワーク抽象化レイヤ(NAL)ユニットストリームとバイトストリームとの間の関係を指定し、そのいずれかがビットストリームと称される。
ビットストリームは、NALユニットストリーム形式およびバイトストリーム形式の2つ形式のうちの1つである。NALユニットストリーム形式は、概念的にはより「基本的」なタイプである。NALユニットストリーム形式は、NALユニットと呼ばれるシンタックス構造のシーケンスを含む。このシーケンスは、デコード順に順序付けられる。NALユニットストリームにおけるNALユニットのデコード順序(およびコンテンツ)には制約が課される。
バイトストリーム形式は、NALユニットをデコード順に順序付け、各NALユニットにスタートコードプレフィックスおよび0個またはそれ以上の0値バイトを前置してバイトのストリームを構成することによってNALユニットストリーム形式から構築され得る。NALユニットストリーム形式は、バイトのこのストリーム内の一意的なスタートコードプレフィックスパターンの配置を探索することによってバイトストリーム形式から抽出することができる。
この節では、ビットストリームを介して与えられるソースとデコード済みピクチャとの間の関係を指定する。
ビットストリームによって表されるビデオソースは、デコード順のピクチャのシーケンスである。
ソースピクチャおよびデコード済みピクチャは、各々1つまたは複数のサンプル配列からなる。
- ルーマ(Y)のみ(モノクロ)。
- ルーマおよび2つのクロマ(YCbCrまたはYCgCo)。
- 緑色、青色、および赤色(GBR、RGBとしても知られている)。
- 他の未指定のモノクロまたは3刺激カラーサンプリングを表す配列(たとえば、YZX、XYZとしても知られている)。
これらの配列に関連付けられている変数および用語は、ルーマ(またはLもしくはY)およびクロマと称され、2つのクロマ配列は、CbおよびCrと称され、使用中の実際の色表現方法とは関係ない。使用中の実際の色表現方法は、ITU-T H.SEI|ISO/IEC 23002-7で指定されているVUIパラメータで指定されるシンタックスにより示され得る。
S2503:フィルタ係数およびブロックに対する再構成済みサンプル値に従って総和値を取得する。
一例において、
- 変数currは、次のように導出される。
curr=recPicture[hx][vy]
変数sumは、次のように導出される。
sum=f[idx[0]]*(Clip3(-c[idx[0]],c[idx[0]], recPicture[hx][vy+y3]-curr)+
Clip3(-c[idx[0]],c[idx[0]], recPicture[hx][vy-y3]-curr))+
f[idx[1]]*(Clip3(-c[idx[1]],c[idx[1]], recPicture[hx+1][vy+y2]-curr) +
Clip3(-c[idx[1]],c[idx[1]], recPicture[hx-1][vy-y2]-curr))+
f[idx[2]]*(Clip3(-c[idx[2]],c[idx[2]], recPicture[hx][vy+y2]-curr) +
Clip3(-c[idx[2]],c[idx[2]], recPicture[hx][vy-y2]-curr))+
f[idx[3]]*(Clip3(-c[idx[3]],c[idx[3]], recPicture[hx-1][vy+y2]-curr) +
Clip3(-c[idx[3]],c[idx[3]], recPicture[hx+1][vy-y2]-curr))+
f[idx[4]]*(Clip3(-c[idx[4]],c[idx[4]], recPicture[hx+2][vy+y1]-curr) +
Clip3(-c[idx[4]],c[idx[4]], recPicture[hx-2][vy-y1]-curr))+
f[idx[5]]*(Clip3(-c[idx[5]],c[idx[5]], recPicture[hx+1][vy+y1]-curr) +
Clip3(-c[idx[5]],c[idx[5]], recPicture[hx-1][vy-y1]-curr))+
f[idx[6]]*(Clip3(-c[idx[6]],c[idx[6]], recPicture[hx][vy+y1]-curr) +
Clip3(-c[idx[6]],c[idx[6]], recPicture[hx][vy-y1]-curr))+
f[idx[7]]*(Clip3(-c[idx[7]],c[idx[7]], recPicture[hx-1][vy+y1]-curr) +
Clip3(-c[idx[7]],c[idx[7]], recPicture[hx+1][vy-y1]-curr))+
f[idx[8]]*(Clip3(-c[idx[8]],c[idx[8]], recPicture[hx-2][vy+y1]-curr) +
Clip3(-c[idx[8]],c[idx[8]], recPicture[hx+2][vy-y1]-curr))+
f[idx[9]]*(Clip3(-c[idx[9]],c[idx[9]], recPicture[hx+3][vy]-curr) +
Clip3(-c[idx[9]],c[idx[9]], recPicture[hx-3][vy]-curr))+
f[idx[10]]*(Clip3(-c[idx[10]],c[idx[10]], recPicture[hx+2][vy]-curr) +
Clip3(-c[idx[10]],c[idx[10]], recPicture[hx-2][vy]-curr))+
f[idx[11]]*(Clip3(-c[idx[11]],c[idx[11]], recPicture[hx+1][vy]-curr) +
Clip3(-c[idx[11]],c[idx[11]], recPicture[hx-1][vy]-curr))
別の例では、
- 変数currは、次のように導出される。
curr=recPicture[hx][vy]
- クロマフィルタ係数f[j]の配列およびクロマクリッピング値c[j]の配列は、j=0..5として、次のように導出される。
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][altIdx][j]
c[j]=AlfClipC[slice_alf_aps_id_chroma][altIdx][j]
- 変数sumは、次のように導出される。
sum=f[0] * (Clip3(-c[0],c[0],recPicture[hx][vy+y2]-curr)+
Clip3(-c[0],c[0],recPicture[hx][vy-y2]-curr)) +
f[1] * (Clip3(-c[1],c[1],recPicture[hx+1][vy+y1]-curr) +
Clip3(-c[1],c[1],recPicture[hx-1][vy-y1]-curr)) +
f[2] * (Clip3(-c[2],c[2],recPicture[hx][vy+y1]-curr) +
Clip3(-c[2],c[2],recPicture[hx][vy-y1]-curr))+
f[3] * (Clip3(-c[3],c[3],recPicture[hx-1][vy+y1]-curr) +
Clip3(-c[3],c[3],recPicture[hx+1][vy-y1]-curr)) +
f[4] * (Clip3(-c[4],c[4],recPicture[hx+2][vy]-curr) +
Clip3(-c[4],c[4],recPicture[hx-2][vy]-curr)) +
f[5] * (Clip3(-c[5],c[5],recPicture[hx+1][vy]-curr) +
Clip3(-c[5],c[5],recPicture[hx-1][vy]-curr))
S2504:ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得する。
一例において、丸めプロセスは、加えられた総和値を取得するために垂直位置に基づき決定された値を総和値に加えることと、垂直位置に基づき加えられた総和値をシフトすることとを含む。
一例において、丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは総和値であり、alfShiftYはサンプルの垂直位置に基づき決定される変数である。
一例において、丸められた総和値は、(sum+(1<<(alfShiftC-1)))>>alfShiftCに等しく、sumは総和値であり、alfShiftCはサンプルの垂直位置に基づき決定される変数である。
alfShiftCはクロマサンプル位置の変数であり、alfShiftYはルーマスマップル位置の変数であり、本開示では、これら2つの変数は交換可能に使用できることは理解され得る。
一例において、サンプルの垂直位置が以下の条件のいずれか1つを満たすときに、alfShiftYは10に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。いくつかの例では、tは2、3、4、5、6、などである。
一例において、サンプルの垂直位置が以下の条件のいずれか1つを満たさないときに、alfShiftYは7に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一例において、yが0に等しいときに、alfShiftYは10に等しい。
一例において、yが0に等しくないときに、alfShiftYは7に等しい。
一例において、ブロック内のサンプルの垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である。
Figure 2023511206000027
または
Figure 2023511206000028
S2605:丸められた総和値に従ってブロックに対するフィルタ再構成済みサンプル値を取得する。
ALFプロセスの出力は、適応ループフィルタalfPictureLの後の修正された再構成済みピクチャサンプル配列であり、sps_chroma_format_idcが0に等しくないときには、配列ccAlfPictureCbおよびccAlfPictureCrである。
一例において、
ルーマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
- 適応ループフィルタリングプロセスの前の再構成済みルーマピクチャサンプル配列recPicture、
- フィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureL、
- 現在のピクチャの左上サンプルに関する現在のルーマコーディングツリーブロックの左上サンプルを指定するルーマ配置(xCtb,yCtb)。
この処理の出力は、修正されフィルタリングされた再構成済みルーマピクチャサンプル配列alfPictureLである。
フィルタインデックスに対する導出プロセスは、配置(xCtb,yCtb)および再構成済みルーマピクチャサンプル配列recPictureを入力とし、x,y=0..CtbSizeY-1であるfiltIdx[x][y]およびtransposeIdx[x][y]を出力として、呼び出される。
フィルタリングされた再構成済みルーマサンプルalfPictureL[xCtb+x][yCtb+y]の導出のために、現在のルーマコーディングツリーブロックrecPicture[xCtb+x][yCtb+y]の内側の各再構成済みルーマサンプルは、x,y=0..CtbSizeY-1として次のようにフィルタリングされる。
- filtIdx[x][y]によって指定されたフィルタに対応するルーマフィルタ係数f[j]の配列およびルーマクリッピング値c[j]の配列は、j=0..11として、次のように導出される。
- AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16より小さい場合、次が適用される:
i=AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]
f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j]
c[j]=2BitDepth
- そうでなければ、(AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16以上である場合、次が適用される:
i=sh_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]-16]
f[j]=AlfCoeffL[i][filtIdx[x][y]][j]
c[j]=AlfClipL[i][filtIdx[x][y]][j]
- ルーマフィルタ係数およびクリッピング値インデックスidxは、transposeIdx[x][y]に応じて次のように導出される。
- transposeIdx[x][y]が1に等しい場合、次が適用される:
idx[]={9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6}
- そうでなければ、transposeIdx[x][y]が2に等しい場合、次が適用される:
idx[]={0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11}
- そうでなければ、transposeIdx[x][y]が3に等しい場合、次が適用される:
idx[]={9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6}
- そうでなければ、次が適用される。
idx[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
- i,j=-3..3に対して、ルーマサンプルの所与の配列recPictureの内側の対応するルーマサンプル(x,y)の各々に対する配置(hx+i, vy+j)は、次のように導出される。
hx+i=Clip3(0, pps_pic_width_in_luma_samples-1, xCtb+x+i)
vy+j=Clip3(0, pps_pic_height_in_luma_samples-1, yCtb+y+j)
- 変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagは、(xCtb, yCtb)、(x, y)、および4に等しくなるように設定されている変数vbOffsetを入力としてALF境界位置導出プロセスを呼び出すことによって導出される。
- 変数hx+iおよびvy+jは、(xCtb, yCtb)、(hx+i, vy+j)、0に等しくなるように設定されている変数isChroma、clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagを入力としてALFサンプルパディングプロセスを呼び出すことによって修正される。
- 変数applyAlfLineBufBoundaryisは、次のように導出される。
- 現在のコーディングツリーブロックの底部境界が、現在のピクチャの底部境界であり、pps_pic_height_in_luma_samples-yCtb <= CtbSizeY-4である場合に、applyAlfLineBufBoundaryは0に等しくなるように設定される:
- そうでなければ、applyAlfLineBufBoundaryは1に等しくなるように設定される。
- 垂直サンプル位置オフセットy1、y2、y3、および変数alfShiftYは、垂直ルーマサンプル位置yおよびapplyAlfLineBufBoundaryに従って表45において指定されている。
- 変数currは、次のように導出される。
curr=recPicture[hx][vy]
- 変数sumは、次のように導出される。
sum=f[idx[0]]*(Clip3(-c[idx[0]],c[idx[0]], recPicture[hx][vy+y3]-curr)+
Clip3(-c[idx[0]],c[idx[0]], recPicture[hx][vy-y3]-curr))+
f[idx[1]]*(Clip3(-c[idx[1]],c[idx[1]], recPicture[hx+1][vy+y2]-curr) +
Clip3(-c[idx[1]],c[idx[1]], recPicture[hx-1][vy-y2]-curr))+
f[idx[2]]*(Clip3(-c[idx[2]],c[idx[2]], recPicture[hx][vy+y2]-curr) +
Clip3(-c[idx[2]],c[idx[2]], recPicture[hx][vy-y2]-curr))+
f[idx[3]]*(Clip3(-c[idx[3]],c[idx[3]], recPicture[hx-1][vy+y2]-curr) +
Clip3(-c[idx[3]],c[idx[3]], recPicture[hx+1][vy-y2]-curr))+
f[idx[4]]*(Clip3(-c[idx[4]],c[idx[4]], recPicture[hx+2][vy+y1]-curr) +
Clip3(-c[idx[4]],c[idx[4]], recPicture[hx-2][vy-y1]-curr))+
f[idx[5]]*(Clip3(-c[idx[5]],c[idx[5]], recPicture[hx+1][vy+y1]-curr) +
Clip3(-c[idx[5]],c[idx[5]], recPicture[hx-1][vy-y1]-curr))+
f[idx[6]]*(Clip3(-c[idx[6]],c[idx[6]], recPicture[hx][vy+y1]-curr) +
Clip3(-c[idx[6]],c[idx[6]], recPicture[hx][vy-y1]-curr))+
f[idx[7]]*(Clip3(-c[idx[7]],c[idx[7]], recPicture[hx-1][vy+y1]-curr) +
Clip3(-c[idx[7]],c[idx[7]], recPicture[hx+1][vy-y1]-curr))+
f[idx[8]]*(Clip3(-c[idx[8]],c[idx[8]], recPicture[hx-2][vy+y1]-curr) +
Clip3(-c[idx[8]],c[idx[8]], recPicture[hx+2][vy-y1]-curr))+
f[idx[9]]*(Clip3(-c[idx[9]],c[idx[9]], recPicture[hx+3][vy]-curr) +
Clip3(-c[idx[9]],c[idx[9]], recPicture[hx-3][vy]-curr))+
f[idx[10]]*(Clip3(-c[idx[10]],c[idx[10]], recPicture[hx+2][vy]-curr) +
Clip3(-c[idx[10]],c[idx[10]], recPicture[hx-2][vy]-curr))+
f[idx[11]]*(Clip3(-c[idx[11]],c[idx[11]], recPicture[hx+1][vy]-curr) +
Clip3(-c[idx[11]],c[idx[11]], recPicture[hx-1][vy]-curr))
sum=curr+((sum+(1<<(alfShiftY-1)))>>alfShiftY)
- 修正されフィルタリングされた再構成済みルーマピクチャサンプルalfPictureL[xCtb+x][yCtb+y]は、次のように導出される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0, (1<<BitDepth)-1, sum)
Figure 2023511206000029
別の例では、
クロマサンプルに対するコーディングツリーブロックフィルタリングプロセス
このプロセスの入力は、以下の通りである。
- 適応ループフィルタリングプロセスの前の再構成済みクロマピクチャサンプル配列recPicture、
- フィルタリングされた再構成済みクロマピクチャサンプル配列alfPicture、
- 現在のピクチャの左上サンプルに関する現在のクロマコーディングツリーブロックの左上サンプルを指定するクロマ配置(xCtbC,yCtbC)、
- 代替的クロマフィルタインデックスaltIdx。
この処理の出力は、修正されフィルタリングされた再構成済みクロマピクチャサンプル配列alfPictureである。
現在のクロマコーディングツリーブロックの幅ctbWidthCおよび高さctbHeightCは、次のように導出される。
ctbWidthC=CtbSizeY/SubWidthC
ctbHeightC=CtbSizeY/SubHeightC
フィルタリングされた再構成済みクロマサンプルalfPicture[xCtbC+x][yCtbC+y]の導出のために、現在のクロマコーディングツリーブロックrecPicture[xCtbC+x][yCtbC+y]の内側の各再構成済みクロマサンプルは、x=0..ctbWidthC-1、y=0..ctbHeightC-1として次のようにフィルタリングされる。
- i,j=-2..2に対して、クロマサンプルの所与の配列recPictureの内側の対応するクロマサンプル(x,y)の各々に対する配置(hx+i, vy+j)は、次のように導出される。
hx+i=Clip3(0, pps_pic_width_in_luma_samples / SubWidthC-1, xCtbC+x+i)
vy+j=Clip3(0, pps_pic_height_in_luma_samples / SubHeightC-1, yCtbC+y+j)
- 変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagは、(xCtbC * SubWidthC, yCtbC * SubHeightC)、(x * SubWidthC, y *SubHeightC)、および2*SubHeightCに等しくなるように設定されている変数vbOffsetを入力としてALF境界位置導出プロセスを呼び出すことによって導出される。
- 変数hx+iおよびvy+jは、(xCtbC*SubWidthC, yCtbC*SubHeightC), (hx+i, vy+j)、1に等しくなるように設定されている変数isChroma、clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、およびclipBotRightFlagを入力としてALFサンプルパディングプロセスを呼び出すことによって修正される。
- 変数applyAlfLineBufBoundaryは、次のように導出される。
- 現在のコーディングツリーブロックの底部境界が、現在のピクチャの底部境界であり、pps_pic_height_in_luma_samples-(yCtbC*SubHeightC)<CtbSizeY-4である場合に、applyAlfLineBufBoundaryは0に等しくなるように設定される。
- そうでなければ、applyAlfLineBufBoundaryは1に等しくなるように設定される。
- 垂直サンプル位置オフセットy1、y2、および変数alfShiftCは、垂直クロマサンプル位置yおよびapplyAlfLineBufBoundaryに従って表46において指定されている。
- 変数currは、次のように導出される。
curr=recPicture[hx][vy]
- クロマフィルタ係数f[j]の配列およびクロマクリッピング値c[j]の配列は、j=0..5として、次のように導出される。
f[j]=AlfCoeffC[sh_alf_aps_id_chroma][altIdx][j]
c[j]=AlfClipC[sh_alf_aps_id_chroma][altIdx][j]
- 変数sumは、次のように導出される。
sum=f[0] * (Clip3(-c[0],c[0],recPicture[hx][vy+y2]-curr)+
Clip3(-c[0],c[0],recPicture[hx][vy-y2]-curr)) +
f[1] * (Clip3(-c[1],c[1],recPicture[hx+1][vy+y1]-curr) +
Clip3(-c[1],c[1],recPicture[hx-1][vy-y1]-curr)) +
f[2] * (Clip3(-c[2],c[2],recPicture[hx][vy+y1]-curr) +
Clip3(-c[2],c[2],recPicture[hx][vy-y1]-curr))+
f[3] * (Clip3(-c[3],c[3],recPicture[hx-1][vy+y1]-curr) +
Clip3(-c[3],c[3],recPicture[hx+1][vy-y1]-curr)) +
f[4] * (Clip3(-c[4],c[4],recPicture[hx+2][vy]-curr) +
Clip3(-c[4],c[4],recPicture[hx-2][vy]-curr)) +
f[5] * (Clip3(-c[5],c[5],recPicture[hx+1][vy]-curr) +
Clip3(-c[5],c[5],recPicture[hx-1][vy]-curr))
sum=curr+((sum+(1<<(alfShiftC-1)))>>alfShiftC)
- 修正されフィルタリングされた再構成済みクロマピクチャサンプルalfPicture[xCtbC+x][yCtbC+y]は、次のように導出される。
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0, (1<<BitDepth)-1, sum)
Figure 2023511206000030
図26に示されているような一実装形態において、ビデオデコード装置2600が開示されており、装置2600は、ピクチャのブロックに対する再構成済みサンプル値を取得するように構成されている、再構成モジュール2601と、ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得するように構成されている、解析モジュール2602と、フィルタ係数およびブロックに対する再構成済みサンプル値に従って総和値を取得するように構成されている、計算モジュール2603と、ブロック内のサンプルの垂直位置に従って総和値を丸め、丸められた総和値を取得するように構成されている、丸めモジュール2604と、丸められた総和値に従ってブロックに対するフィルタ再構成済みサンプル値を取得するように構成されている、フィルタリングモジュール2605とを備える。
一例において、丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは総和値であり、alfShiftYはサンプルの垂直位置に基づき決定される変数である。
一例において、サンプルの垂直位置が以下の条件のいずれか1つを満たすときに、alfShiftYは10に等しい。y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一例において、サンプルの垂直位置が以下の条件のいずれか1つを満たさないときに、alfShiftYは7に等しい。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1、ただし、yはサンプルの垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である。
一例において、yが0に等しいときに、alfShiftYは10に等しい。
一例において、yが0に等しくないときに、alfShiftYは7に等しい。
一例において、ブロック内のサンプルの垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である。
一例において、丸めモジュールは、加えられた総和値を取得するために垂直位置に基づき決定される値を総和値に加算し、垂直位置に基づき加えられた総和値をシフトして、丸められた総和値を取得するように構成される。
ビデオデコード装置内のモジュールのさらなる詳細は、上記の方法例および実装形態を参照することも可能である。
図12cに描かれている追加の解決方法(解決方法3)は、ラインH、J、I(仮想境界より上にある)およびラインK、L、M(仮想境界より下にある)のフィルタリングを実行するためにも使用され得る。所与のブロックに対する支配的なエッジの方向に基づき、ALFフィルタが修正される。
所与のブロックに対する支配的なエッジ方向を導出することができる任意のアルゴリズムが使用されてよく、以下で説明されているアルゴリズムに限定されないことに留意されたい。所与のブロックに対する支配的なエッジ方向は、勾配値gv、gh gd1、およびgd2を使用して所与のブロックについて計算された勾配値ならびにALFブロック分類において計算された方向性値Dを使用して計算され得る。方向性値Dが0、1、2である場合、図12cの部分図cに描かれているように、解決方法1(係数を垂直方向に加える)が選択される。方向性値Dが3または4である場合(ブロックの方向性が強い「対角線」のエッジを有する場合)、次のさらなる条件、gd1がgd2以上であるかどうかがチェックされる。もし真であれば、135度の勾配が支配的なエッジ方向として選択され、したがって図12cの部分図bに描かれているように、修正済みフィルタリングが以下のように実行される。
ラインMおよびHについてはc3'=c3+c0
ラインLおよびIについてはc6'=c6+c1
c7'=c7+c2
c8'=c3+c8+c0
ラインJおよびKについて:
c9'=c9+c8+c3+c0
c10'=c10+c7+c2
c11'=c1+c6+c11+c4
c12'=c12+2*c5
その一方で、gd2がgd1より大きい場合、図12cの部分図aに描かれているように、修正済みフィルタリングが次のように実行される。
ラインMおよびHについてはc1'=c1+c0
ラインLおよびIについてはc4'=c1+c4+c0
c5'=c5+c2
c6'=c6+c3
ラインJおよびKについて:
c9'=c9+c4+c1+c0
c10'=c10+c5+c2
c11'=c8+c7+c6+c3+c11
c12'=c12+2*c7
所与のフィルタが表1に与えられているように変換される場合、上記の解決方法はすべてそれでも使用することができる。上記の解決方法における式は、変換が適用されない場合に与えられる。変換済みフィルタについては、式中の係数は、それぞれ、式17、18、19に基づき置き換えることができる。
図19aおよび図19bに描かれている追加の解決方法(解決方法4)は、パディング済み係数の絶対和がパディングされていない係数の絶対和の閾値(T)倍より大きいときにフィルタリングを無効にする。たとえば、ラインMおよびHについて、(2*abs(c0)>(T*(2*(abs(c1)+abs (c2)+abs(c3)+abs(c4)+abs(c5)+abs(c6)+abs(c7)+abs(c8)+abs(c9)+abs(c10)+abs(c11))+abs(c12)))である場合、ALFフィルタリングは、ラインMおよびHに対して無効にされる。
同様に、ラインLおよびIについて、(2*(abs(c0)+abs(c1)+abs(c2)+abs (c3))>(T*(2*(abs(c4)+abs(c5)+abs(c6)+abs(c7)+abs(c8)+abs(c9)+abs(c10)+abs(c11))+abs(c12)))である場合、ALFフィルタリングは、ラインLおよびIに対して無効にされる。
同様に、ラインJおよびKについて、(2*(abs (c0)+ abs (c1) +abs (c2)+ abs (c3)+abs(c4)+abs(c5)+abs(c6)+abs(c7)+abs(c8))>(T*(2*(abs(c9)+abs(c10)+abs(c11))+abs(c12)))である場合、ALFフィルタリングは、ラインJおよびKに対して無効にされる。
ここで、Tは一般的に0から1までの範囲内の小数値を取り得る閾値である。たとえば、T値は0.5、0.6、または0.7とすることができる。
同様にクロマの場合、図20に描かれているように、ラインNおよびKについて、(2*abs (c0)>(T*(2*(abs(c1)+abs (c2)+abs(c3)+abs(c4)+abs(c5))+abs(c6))))である場合、ALFフィルタリングは、ラインNおよびKに対して無効にされる。
ラインMおよびLについて、((2*(abs (c0)+ abs (c1) +abs (c2)+ abs (c3))>(T*(2*(abs(c4)+abs(c5))+abs(c6))))である場合、ALFフィルタリングは、ラインMおよびLに対して無効にされる。
関数abs(x)は次のように定義される。
Figure 2023511206000031
代替的な解決方法によれば、フィルタリング演算は、決定された幾何学的変換およびフィルタリング済みピクセルサンプルの仮想境界への水平方向の近接度に基づく場合に無効にされる。言い換えると、フィルタリングされるべきピクセルサンプルが仮想境界より上または下にあるN個のサンプルであり(水平距離は水平境界に対してN)、決定された幾何学的フィルタ変換はtransformation_Xであると仮定する。以下の場合に、ピクセルサンプルに対するフィルタリング演算は無効にされる。
1. Nが所定の閾値より小さい場合、すなわちthrである、
2. そして、transformation_Xが、ビットストリームにおいて事前決定されているか、または示されている変換のセットの中にある場合。
特定の一例によれば、thrは1に等しい(仮想境界より1ライン上および1ライン下にあるサンプルの行を示す)。別の例によれば、変換のセットは、「変換なし」、「対角線」、「垂直反転」、「回転」のうちの少なくとも1つを含む。別の例によれば、thrは1に等しく、変換のセットは、「変換なし」、「対角線」、「垂直反転」、「回転」のうちの少なくとも1つを含む。別の例では、変換のセットは、対角線および回転を含む。
変換のセットは、すべての可能なフィルタ変換のサブセットであることに留意されたい。ドキュメントJVET1001_v7「Versatile Video Coding (Draft 3)」ドキュメント(http://phenix.it-sudparis.eu/jvet/で公開アクセス可能)によれば、4つの可能なフィルタ変換がある。このドキュメントでは、フィルタ変換は「8.5.4.3 Derivation process for ALF transpose and filter index for luma samples」の項に従って決定され、決定された変換は変数transposeIdxによって示される。transposeIdxによって想定され得る値は、0、1、2、および3である。
一例によれば、フィルタリング演算は、transposeIdxが所定の値に等しいと決定された場合に、ピクセルサンプルに対して無効にされる。所定の値のセットは、0から3の間の少なくとも1つの値を含むことに留意されたい。所定値のセットは、可能な値のすべて(0、1、2、および3のすべて)を含まないことにもさらに留意されたい。
別の例では、フィルタリング演算は、フィルタリングされるべきピクセルが仮想境界より上または下の1つのサンプルであり、決定済みフィルタ変換が所定の値のセットの中にある場合に、無効にされる。
クロマサンプルに対するラインバッファの要件:
図13は、クロマサンプルに対するラインバッファ要件を示している。デブロッキングは、2つのサンプルしか使用せず、最大1つのサンプルを修正するときに、クロマALFラインバッファ要件は、6.25ラインまで下がる。クロマサンプルに対しては明示的なブロック分類が実行されないので、フィルタリングのみが仮想境界(VB)のところで修正されなければならない。図14では、パディングを使用すること(解決方法1)、または破棄された係数を中心係数に加えること(解決方法2)のいずれかによって生成されたフィルタの歪んだバージョンを示す、クロマに対する修正済みALFフィルタを参照している。
仮想境界が6ラインであるときの修正済みブロック分類
図15は、デブロッキングフィルタがラインバッファの6つのラインを使用するときのALFラインバッファ要件を示している。したがって、仮想境界は、CTU境界より6ライン上にある。この場合、全ループフィルタラインバッファ要件は、15.25ラインに増える。
ラインバッファ要件を低減するために、図16では仮想境界でのブロック分類決定を再利用し、フィルタリングのために切り捨てられたバージョンを使用することを開示し、図16では以下に説明されている1つの解決方法を示している。
ラインCから始まる4×4ブロックのブロック分類は、ブロック分類が仮想境界より下の任意のラインを必要としないことを確実にするためにラインHをラインIにパディングすることによって達成される。図16では、ラインHがラインIにパディングされ、それによりラインCから始まる4×4ブロックのブロック分類決定を円滑にする。
ラインG、Hは、ブロックC、D、E、Fからのブロック分類決定を再利用する。
ラインI、Jは、ブロックK、L、M、Nからのブロック分類決定を使用する。
フィルタの切り捨てられたバージョン(スライド8および9)は、ラインF、G、H、I、J、Kをフィルタリングするために使用される。
ラインG、Hは、ブロックC、D、E、Fからのブロック分類決定を再利用する。ラインI、Jは、ラインK、L、M、Nからのブロック分類決定を再利用し(または)、ラインI、J、K、Lは、1つの4×4ブロックセグメントとみなされてよく、分類が、これらの4つのラインに対して実行され、次いで、ラインM、Nは、ブロックK、L、M、Nからのブロック分類決定を再利用する。
図17は、グリッドシフトアプローチを使用しており、頂部画像境界の最初の2つのラインと底部画像境界の最後の2つのラインが別々に分類されて、フィルタリングされ、したがってALF分類およびフィルタリンググリッドはY軸において2サンプル分下へ移動される。この解決方法は、所与の4×4ブロックが仮想境界に重なる、または交差することが決してないという利点を有する。一般に、仮想境界サイズが4の倍数(ALFブロック分類サイズ)でないときに、ALFフィルタリンググリッドは、次の式を使用することによってシフトされ得る。
((仮想境界サイズ)/4)-4。実際のフィルタリングそれ自体については、図12a、図12b、および図12cで説明されているフィルタの歪んだバージョンが使用され得る。図17を参照すると、仮想境界がCTU境界より6ライン上にあるときに、解決方法は「グリッドシフト」アプローチを使用する。
ALFフィルタグリッドは、所与の4×4ブロック分類ウィンドウが所与の仮想境界を横切らないことを確実にするように、Y軸においてライン2つ分シフトされる。
一般に、仮想境界サイズが4の倍数(ALFブロック分類サイズ)でないときに、グリッドは、Y軸上で次の値によってシフトされ得る。
((仮想境界サイズ)/4)-4。
フレーム境界において、
頂部フレーム境界ラインA'、B'では、第3のラインから始まる4×4ブロックのブロック分類決定を再利用する。
同様に、底部フレーム境界の最後の2つのラインについては、ブロック分類は、すぐ上の4×4ブロック分類ウィンドウからの決定を再利用する。
本発明の実施形態は、主にビデオコーディングに基づき説明されてきたが、コーディングシステム10、エンコーダ20およびデコーダ30(およびそれに対応してシステム10)の実施形態ならびに本明細書において記載されている他の実施形態は、静止画像処理またはコーディング、すなわちビデオコーディングにおけるように任意の先行する、または連続するピクチャから独立している個別のピクチャの処理またはコーディングを行うようにも構成され得ることに留意されたい。一般に、フレーム間予測ユニット244(エンコーダ)および344(デコーダ)だけが、ピクチャ処理コーディングが単一のピクチャ17に限定される場合に、利用可能でない場合がある。ビデオエンコーダ20およびビデオデコーダ30の他のすべての機能性(ツールまたは技術とも称される)は、静止画像処理、たとえば、残差計算204/304、変換206、量子化208、逆量子化210/310、(逆)変換212/312、パーティション分割262/362、フレーム内予測254/354、および/またはループフィルタ220、320、ならびにエントロピーコーディング270およびエントロピーデコード304に等しく使用され得る。
次に示すのは、上で述べた実施形態において示されているようなエンコード方法さらにはデコード方法、ならびにそれらを使用するシステムの応用例の説明である。
図23は、コンテンツ配信サービスを実現するためのコンテンツ供給システム3100を示すブロック図である。このコンテンツ供給システム3100は、キャプチャデバイス3102、端末デバイス3106を備え、任意選択でディスプレイ3126を備える。キャプチャデバイス3102は、通信リンク3104を介して端末デバイス3106と通信する。通信リンクは、上で説明されている通信チャネル13を含んでいてもよい。通信リンク3104は、限定はしないが、WIFI、イーサネット、ケーブル、無線(3G/4G/5G)、USB、またはこれらの任意の種類の組合せ、または同様のものを含む。
キャプチャデバイス3102は、データを生成し、上記の実施形態において示されているようなエンコード方法によってデータをエンコードし得る。代替的に、キャプチャデバイス3102は、データをストリーミングサーバ(図示せず)に配信し、サーバがデータをエンコードし、エンコード済みデータを端末デバイス3106に伝送し得る。キャプチャデバイス3102は、限定はしないが、カメラ、スマートフォンもしくはパッド、コンピュータもしくはラップトップ、ビデオ会議システム、PDA、車載デバイス、またはこれらのうちのどれかの組合せ、または同様のものを含む。たとえば、キャプチャデバイス3102は、上で説明されているようなソースデバイス12を含み得る。データがビデオを含むときには、キャプチャデバイス3102に含まれるビデオエンコーダ20は、実際にはビデオエンコード処理を実行し得る。データがオーディオ(すなわち、音声)を含むときには、キャプチャデバイス3102に含まれるオーディオエンコーダは、実際にはオーディオエンコード処理を実行し得る。いくつかの実用的なシナリオについては、キャプチャデバイス3102は、エンコードされたビデオおよびオーディオデータを、それらをまとめて多重化することによって配信する。他の実用的なシナリオについては、たとえば、ビデオ会議システムにおいて、エンコード済みオーディオデータおよびエンコード済みビデオデータは多重化されない。キャプチャデバイス3102は、エンコード済みオーディオデータおよびエンコード済みビデオデータを別々に端末デバイス3106に配信する。
コンテンツ供給システム3100において、端末デバイス310は、エンコード済みデータを受信し、再現する。端末デバイス3106は、スマートフォンもしくはパッド3108、コンピュータもしくはラップトップ3110、ネットワークビデオレコーダー(NVR)/デジタルビデオレコーダー(DVR)3112、TV3114、セットトップボックス(STB)3116、ビデオ会議システム3118、ビデオ監視システム3120、携帯情報端末(PDA)3122、車載デバイス3124、またはこれらのうちのどれかの組合せなどの、データ受信および復元機能を有するデバイス、または上述のエンコード済みデータをデコードすることができる同様のものとすることが可能である。たとえば、端末デバイス3106は、上で説明されているようなデスティネーションデバイス14を含み得る。エンコード済みデータがビデオを含むときには、端末デバイスに含まれるビデオデコーダ30は、ビデオデコードを実行するように優先順位付けされる。エンコード済みデータがオーディオを含むときには、端末デバイスに含まれるオーディオデコーダは、オーディオデコード処理を実行するように優先順位付けされる。
ディスプレイを備えた端末デバイス、たとえば、スマートフォンもしくはパッド3108、コンピュータもしくはラップトップ3110、ネットワークビデオレコーダー(NVR)/デジタルビデオレコーダー(DVR)3112、TV3114、携帯情報端末(PDA)3122、または車載デバイス3124については、端末デバイスは、デコード済みデータをそのディスプレイに供給することができる。ディスプレイを備えていない端末デバイス、たとえば、STB3116、ビデオ会議システム3118、またはビデオ監視システム3120については、外部ディスプレイ3126がそれに接続され、デコード済みデータを受信して表示する。
このシステムにおける各デバイスがエンコードまたはデコードを実行するときに、上述の実施形態において示されているような、ピクチャエンコードデバイスまたはピクチャデコードデバイスが使用され得る。
図24は、端末デバイス3106の一例の構造を示す図である。端末デバイス3106が、キャプチャデバイス3102からストリームを受信した後、プロトコル手順実行ユニット3202は、ストリームの伝送プロトコルを解析する。プロトコルは、限定はしないが、リアルタイムストリーミングプロトコル(RTSP)、ハイパーテキスト転送プロトコル(HTTP)、HTTPライブストリーミングプロトコル(HLS)、MPEG-DASH、リアルタイムトランスポートプロトコル(RTP)、リアルタイムメッセージングプロトコル(RTMP)、またはこれらの任意の種類の組合せ等、または同様のものを含む。
プロトコル手順実行ユニット3202がストリームを処理した後、ストリームファイルが生成される。このファイルは、逆多重化ユニット3204に出力される。逆多重化ユニット3204は、多重化されたデータを、エンコード済みオーディオデータと、エンコード済みビデオデータとに分離することができる。上で説明されているように、いくつかの実用的なシナリオについては、たとえば、ビデオ会議システムにおいて、エンコード済みオーディオデータおよびエンコード済みビデオデータは多重化されない。この状況では、エンコード済みデータは、逆多重化ユニット3204を経由せずにビデオデコーダ3206およびオーディオデコーダ3208に伝送される。
逆多重化処理を介して、ビデオエレメンタリーストリーム(ES)、オーディオES、および任意選択でサブタイトルが生成される。上述の実施形態において説明されているようなビデオデコーダ30を含む、ビデオデコーダ3206は、上述の実施形態において示されているデコード方法によってビデオESをデコードし、ビデオフレームを生成し、このデータを同期ユニット3212に供給する。オーディオデコーダ3208は、オーディオESをデコードしてオーディオフレームを生成し、このデータを同期ユニット3212に供給する。代替的に、ビデオフレームは、同期ユニット3212に供給する前に、バッファ(図24には示されていない)に保存するものとしてよい。同様に、オーディオフレームは、同期ユニット3212に供給する前に、バッファ(図24には示されていない)に保存するものとしてよい。
同期ユニット3212は、ビデオフレームおよびオーディオフレームを同期し、ビデオ/オーディオをビデオ/オーディオディスプレイ3214に供給する。たとえば、同期ユニット3212は、ビデオおよびオーディオ情報の提示を同期させる。情報は、コーディングされたオーディオおよび画像データの提示に関するタイムスタンプ、およびデータストリームそれ自体の配信に関するタイムスタンプを使用してシンタックス内にコーディングし得る。
サブタイトルがストリームに含まれる場合、サブタイトルデコーダ3210は、サブタイトルをデコードし、それをビデオフレームおよびオーディオフレームと同期し、ビデオ/オーディオ/サブタイトルをビデオ/オーディオ/サブタイトルディスプレイ3216に供給する。
本発明は、上述のシステムに限定されず、上述の実施形態におけるピクチャエンコードデバイスまたはピクチャデコードデバイスのいずれかが、他のシステム、たとえば、カーシステムに組み込まれ得る。
たとえばエンコーダ20およびデコーダ30の実施形態、ならびにたとえばエンコーダ20およびデコーダ30を参照しつつ本明細書において説明されている機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、これらの機能は、1つまたは複数の命令もしくはコードとして通信媒体を介してコンピュータ可読媒体上に記憶されるか、または伝送され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を円滑にする任意の媒体を含む通信媒体に対応する、コンピュータ可読記憶媒体を含み得る。この方式で、コンピュータ可読媒体は、一般的に、(1)非一時的である有形のコンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示において説明されている技術の実装のため命令、コード、および/またはデータ構造体を取り出すために、1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセスされ得る利用可能な任意の媒体であってよい。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
たとえば、限定はしないが、このようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROM、または他の光ディスク記憶装置、磁気ディスク記憶装置、または他の磁気記憶装置デバイス、フラッシュメモリ、または命令もしくはデータ構造体の形態で所望のプログラムコードを記憶するために使用され得る、コンピュータによってアクセスされ得る他の任意の媒体を備えることができる。また、どのような接続もコンピュータ可読媒体と称して差し支えない。たとえば、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに、非一時的な有形の記憶媒体に向けられることは理解されるであろう。本明細書において使用されるとき、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピーディスクおよびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生し、ディスク(disc)は、レーザを用いてデータを光学的に再生する。上述したものの組合せも、コンピュータ可読媒体の範囲内に含められるべきである。
命令は、1つまたは複数のデジタルシグナルプロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の方同等の集積回路もしくはディスクリート部品による論理回路などの1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に適した任意の他の構造のいずれかを指すものとしてよい。それに加えて、いくつかの態様において、本明細書において説明されている機能性は、エンコードおよびデコードを行うように構成されている専用のハードウェアおよび/またはソフトウェアモジュール内に実現されるか、または組み合わされたコーデックに組み込まれてもよい。また、これらの技術は、1つまたは複数の回路または論理要素において完全に実装されることも可能であろう。
本開示の技術は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、様々なデバイスもしくは装置で実装され得る。様々なコンポーネント、モジュール、またはユニットは、開示されている技術を実行するように構成されているデバイスの機能的態様を強調するように本開示において説明されているが、異なるハードウェアユニットによる実現を必ずしも必要としない。むしろ、上で説明されているように、様々なユニットが、コーデックハードウェアユニット内に組み合わされるか、または好適なソフトウェアおよび/またはファームウェアと併せて、上で説明されているような1つまたは複数のプロセッサを含む、相互運用性を有するハードウェアユニットの集合体によって提供され得る。
本発明は、次のさらなる態様を実現する。
〔実施例1〕
ピクチャのサンプル値をフィルタリングする方法であって、ピクチャは第1のブロックと第2のブロックとを備え、第1のブロックおよび第2のブロックはブロック境界において互いに隣接し、ピクチャは、n行およびm列に配置構成されている少なくともn×mサンプルp(i,j)を含み、iは、1からnまでの値を取る行インデックスであり、jは、1からmまでの値を取る列インデックスであり、iが1からkまでの値を取るサンプルp(i,j)は、第1のブロックに属し、iがk+1からnまでの値を取るサンプルは、第2のブロックに属し、kは、nより小さい整数であり、
この方法は、kより小さい整数tおよび1からmまでの範囲内の整数jにより、
iを1からk-t-1の範内の整数として、サンプルp(i,j)の値にフィルタを適用することによってフィルタリング済みサンプル値を生成することであって、フィルタは、フィルタサポートサンプルのセットによってサポートされ、フィルタサポートサンプルのセットは、サンプルp(i,j)および1つまたは複数のさらなるサンプルを含み、フィルタサポートサンプルのセットは、i'をk-t-1より大きい行インデックスとする任意のサンプルp(i',j')を含まない、生成すること、および/または
iをk-tからkの範内の整数として、サンプルp(i,j)の値にフィルタを適用することによってフィルタリング済みサンプル値を生成することであって、フィルタは、フィルタサポートサンプルのセットによってサポートされ、フィルタサポートサンプルのセットは、サンプルp(i,j)および1つまたは複数のさらなるサンプルを含み、フィルタサポートサンプルのセットは、i'をk-tより小さい行インデックスとする任意のサンプルp(i',j')を含まない、生成することを含む、方法。
〔実施例2〕
ピクチャのサンプル値をフィルタリングする方法であって、ピクチャは第1のブロックと第2のブロックとを備え、第1のブロックおよび第2のブロックはブロック境界において互いに隣接し、
ピクチャは、n行およびm列に配置構成されている少なくともn×mサンプルp(i,j)を含み、iは、1からnまでの値を取る行インデックスであり、jは、1からmまでの値を取る列インデックスであり、iが1からkまでの値を取るサンプルp(i,j)は、第1のブロックに属し、iがk+1からnまでの値を取るサンプルは、第2のブロックに属し、kは、nより小さい整数であり、
この方法は、tをkより小さい整数とし、1からkまでの各iおよび1からmまでの各jについて、
フィルタをサンプルp(i,j)の値に適用することによってフィルタリング済みサンプル値を生成することであって、フィルタは、フィルタサポートサンプルのセットによってサポートされ、フィルタサポートサンプルのセットは、サンプルp(i,j)および1つまたは複数のさらなるサンプルを含み、iが1からk-t-1の範囲内にある場合に、フィルタサポートサンプルのセットは、i'をk-t-1より大きい行インデックスとする任意のサンプルp(i',j')を含まず、iがk-tからkまでの範囲内にある場合に、フィルタサポートサンプルのセットは、i'をk-tより小さい行インデックスとする任意のサンプルp(i',j')を含まない、生成することを含む、方法。
〔実施例3〕
第1のブロックは、第1のコーディングツリーユニットCTUであり、第2のブロックは、第2のCTUである、実施例1または2に記載の方法。
〔実施例4〕
tは2、3、4、5、または6である、実施例1から3のいずれか一項に記載の方法。
〔実施例5〕
1からk-t-1の範囲内の各iおよび1からmの範囲内の各jについて、フィルタサポートサンプルのセットは、i'が1からk-t-1の範囲内にある複数のサンプルp(i',j')を含み、
k-tからkの範囲内の各iおよび1からmの各jについて、フィルタサポートサンプルのセットは、i'がk-t以上である複数のサンプルp(i',j')を含む、実施例1から4のいずれか一項に記載の方法。
〔実施例6〕
k-tからkの範囲内の各iおよび1からmの各jについて、フィルタサポートサンプルのセットは、i'がkより大きい1つまたは複数のサンプルp(i',j')を含む、実施例5に記載の方法。
〔実施例7〕
フィルタは、インループフィルタである、実施例1から6のいずれか一項に記載の方法。
〔実施例8〕
フィルタは、デブロッキングフィルタを含む、実施例1から7のいずれか一項に記載の方法。
〔実施例9〕
フィルタは、デブロッキングフィルタ、サンプル適応オフセットフィルタSAO、適応ループフィルタALF、またはクロスコンポーネント適応ループフィルタ(CCALF)を含む、実施例1から8のいずれか一項に記載の方法。
〔実施例10〕
第1のブロックのサンプル値を決定することと、
行1からk-t-1における第1のブロックのサンプル値にフィルタを適用することと、
行k-tからkの第1のブロックのサンプル値をバッファに記憶することと、
第2のブロックのサンプル値を決定することと、
バッファに記憶された行k-tにおける第1のブロックのサンプル値にフィルタを適用することとを含む、実施例1から9のいずれか一項に記載の方法。
〔実施例11〕
フィルタは、適応ループフィルタもしくはクロスコンポーネント適応ループフィルタであるか、または適応フィルタは、現在のブロックのサンプルに、またそのブロックを囲むサンプルにもアクセスする分類ステップを使用することによって決定される、実施例1から10のいずれか一項に記載の方法。
〔実施例12〕
ブロックを囲むサンプルが利用可能でないときに、適応フィルタは、正規化値を使用することによって決定され、正規化値は、正整数値であり、所与のブロックを囲むアクセス可能なサンプルの数に依存する、実施例11に記載の方法。
〔実施例13〕
正規化値は、アクセス可能なサンプルの数と逆比例の関係にある、実施例11または12に記載の方法。
〔実施例14〕
ブロックを囲むすべてのサンプルが利用可能であるとは限らないときに正規化において値は96である、実施例10から13のいずれか一項に記載の方法。
〔実施例15〕
ブロックを囲むすべてのサンプルが利用可能であるときに正規化において値は64である、実施例10から14のいずれか一項に記載の方法。
〔実施例16〕
フィルタは、適応ループフィルタである、実施例1から10のいずれか一項に記載の方法。
〔実施例17〕
対称パディング演算は、要求されたサンプルが所与のサンプルをフィルタリングするのにアクセス可能でないときに適用される、実施例1から10のいずれか一項に記載の方法。
〔実施例18〕
対称パディング演算は、フィルタリング演算に利用可能である直に隣接するサンプルによって利用不可能なサンプルを置き換えることとして定義される、実施例17に記載の方法。
〔実施例19〕
対称パディング演算は、フィルタの両側に片側であってもパディング演算を適用することによってフィルタが対称的にされる方法として定義され、フィルタサンプルはそれでもアクセス可能であり得る、実施例17または18のいずれか一項に記載の方法。
〔実施例20〕
ピクチャは、ビデオシーケンスのフレームに含まれる、実施例1から19のいずれか一項に記載の方法。
〔実施例21〕
ピクチャをエンコードもしくはデコードするために実行されるか、またはピクチャを含むビデオシーケンスをエンコードもしくはデコードするために実行される、実施例1から20のいずれか一項に記載の方法。
〔実施例22〕
フィルタリングプロセスで使用される丸め値は、サンプルp(i,j)の垂直位置(y座標)に依存する、実施例1から21のいずれか一項に記載の方法。
〔実施例23〕
フィルタプロセスで使用される丸め値は、サンプルp(i,j)の垂直位置(y座標)およびフィルタリングプロセスで使用される量子化値(たとえば、>>右シフト値)に依存する、実施例1から22のいずれか一項に記載の方法。
〔実施例24〕
量子化値は、変数Qによって示されるときに、丸め値は、pow(2,Q-1)に等しく、変数は、サンプルp(i,j)の垂直位置(y座標)に従って取得される、実施例23に記載の方法。
〔実施例25〕
丸め値は、サンプルp(i,j)の垂直位置(y座標)が以下の条件のうちのいずれか1つで満たされているときに、512に等しい、実施例22から24のいずれか一項に記載の方法。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1(いくつかの例では、クロマについて、tは2に等しく、ルーマについて、tは4に等しい)。
〔実施例26〕
丸め値は、サンプルp(i,j)の垂直位置(y座標)が以下の条件のうちのいずれか1つで満たされないときに、64に等しい、実施例22から25のいずれか一項に記載の方法。
y==CtbSizeY-t-1、またはy==CtbSizeY-t、またはy==ctbHeightC-t、またはy==ctbHeightC-t-1。
〔実施例27〕
実施例1から26のいずれか一項に記載の方法を実行するための処理回路を備えるエンコーダ(20)。
〔実施例28〕
実施例1から26のいずれか一項に記載の方法を実行するための処理回路を備えるデコーダ(30)。
〔実施例29〕
実施例1から26のいずれか一項に記載の方法を実行するためのプログラムコードを含むコンピュータプログラム。
〔実施例30〕
デコーダであって、
1つまたは複数のプロセッサと、
プロセッサに結合され、プロセッサによる実行のためのプログラミングを記憶する非一時的コンピュータ可読記憶媒体であって、プログラミングは、プロセッサによって実行されたときに、実施例1から26のいずれか一項に記載の方法を実行するようにデコーダを構成する、非一時的コンピュータ可読記憶媒体とを備える、デコーダ。
〔実施例31〕
エンコーダであって、
1つまたは複数のプロセッサと、
プロセッサに結合され、プロセッサによる実行のためのプログラミングを記憶する非一時的コンピュータ可読記憶媒体であって、プログラミングは、プロセッサによって実行されたときに、実施例1から26のいずれか一項に記載の方法を実行するようにエンコーダを構成する、非一時的コンピュータ可読記憶媒体とを備える、エンコーダ。
10 ビデオコーディングシステム
12 ソースデバイス
13 エンコード済みピクチャデータ
13 通信チャネル
14 デスティネーションデバイス
16 ピクチャソース
17 ピクチャまたはピクチャデータ
17 生のピクチャまたは生のピクチャデータ
18 プリプロセッサ(または前処理ユニット)
18 ピクチャプリプロセッサ
18 前処理ユニット
19 前処理済みピクチャ
19 前処理済みピクチャデータ
20 ビデオエンコーダ
21 エンコード済みピクチャデータ
22 通信インターフェースまたは通信ユニット
28 通信インターフェースまたは通信ユニット
30 ビデオデコーダ
31 デコード済みピクチャデータ
32 ポストプロセッサ
32 後処理ユニット
33 後処理済みピクチャ
34 ディスプレイデバイス
201 入力
203 ピクチャブロック
204 残差計算ユニット
205 残差ブロック
206 変換処理ユニット
207 変換係数
208 量子化ユニット
209 量子化済み変換係数
210 逆量子化ユニット
211 量子化解除済み係数
212 逆変換処理ユニット
213 再構成済み残差ブロック
214 再構成ユニット
220 ループフィルタユニット
221 フィルタリング済みブロック
230 デコード済みピクチャバッファ(DPB)
231 以前にデコードされたピクチャ
244 フレーム間予測ユニット
254 フレーム内予測ユニット
260 モード選択ユニット
262 パーティション分割ユニット
265 予測ブロック
265 予測因子
266 シンタックス要素
270 エントロピーエンコードユニット
272 出力
304 エントロピーデコードユニット
309 量子化係数
310 逆量子化ユニット
311 量子化解除済み係数
312 逆変換処理ユニット
313 変換ブロック
314 再構成ユニット
315 再構成済みブロック
320 ループフィルタ
321 フィルタリング済みブロック
330 デコード済みピクチャバッファ(DPB)
331 デコード済みピクチャ
344 フレーム間予測ユニット
354 フレーム内予測ユニット
360 モード選択ユニット
365 予測ブロック
400 ビデオコーディングデバイス
410 受信ポート
420 受信機ユニット(Rx)
430 プロセッサ、論理ユニット、または中央演算処理装置(CPU)
440 送信機ユニット(Tx)
450 送信ポート
460 メモリ
470 コーディングモジュール
500 装置
502 プロセッサ
504 メモリ
506 データ
508 オペレーティングシステム
510 アプリケーションプログラム
512 バス
514 二次記憶装置
518 ディスプレイ
2600 ビデオデコード装置
2601 再構成モジュール
2602 解析モジュール
2603 計算モジュール
2604 丸めモジュール
3100 コンテンツ供給システム
3102 キャプチャデバイス
3104 通信リンク
3106 端末デバイス
3108 スマートフォンもしくはパッド
3110 コンピュータもしくはラップトップ
3112 ネットワークビデオレコーダー(NVR)/デジタルビデオレコーダー(DVR)
3114 TV
3116 セットトップボックス(STB)
3118 ビデオ会議システム
3120 ビデオ監視システム
3122 携帯情報端末(PDA)
3124 車載デバイス
3126 ディスプレイ
3202 プロトコル手順実行ユニット
3204 逆多重化ユニット
3206 ビデオデコーダ
3208 オーディオデコーダ
3210 サブタイトルデコーダ
3212 同期ユニット
3214 ビデオ/オーディオディスプレイ
3216 ビデオ/オーディオ/サブタイトルディスプレイ
本発明の第13の態様は、エンコーダを提供し、これは、1つまたは複数のプロセッサと、プロセッサに結合された、プロセッサによる実行のためのプログラミングを記憶する、非一時的コンピュータ可読記憶媒体であって、プログラミングは、プロセッサによって実行されたときに、第9の態様、第3の態様のいずれか1つおよび第9の態様の実装形態のいずれか1つに従って方法を実行するようにエンコーダを構成する、非一時的コンピュータ可読記憶媒体とを備える。
図5は、例示的な実施形態による、図1Aからのソースデバイス12およびデスティネーションデバイス14のいずれかまたは両方として使用され得る装置500の簡略化されたブロック図である。
図10aでは、ラインGから始まるブロックについて、ラインHおよびIに属すサンプル(サンプルa、b、c、d)のみが勾配計算に使用される。この場合、追加のパディングは必要ない。同様に図10bでは、ラインKから始まるブロックについて、ラインLおよびMに属すサンプル(サンプルa、b、c、d)のみが勾配計算に使用される。この場合、追加のパディングは必要ない。この解決方法は、勾配が対称的なブロック形状を使用して計算されるという利点を有しており、これは、特にピクチャの内容が所与のローカルウィンドウ内で頻繁に変化するときに主観的な画質にとって有利となり得る。また、この解決方法は、4つのサンプル(a、b、c、d)のみを使用して勾配を計算するので計算的な複雑さも低い。
変数clipRightPosは、次のように修正される。
VirtualBoundariesDisabledFlagが1に等しく、任意のn=0..VirtualBoundariesNumVer-1についてVirtualBoundariesPosX[n]-xCtb-xが0より大きく、5より小さい場合、次が適用される:
clipRightPos=VirtualBoundariesPosX[n] (1471)
そうでなければ、CtbSizeY-xが5より小さく、次の条件のうちの1つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しくなるように設定される:
現在のコーディングツリーブロックの右境界は、タイルの右境界であり、loop_filter_across_tiles_enabled_flagは0に等しい。
現在のコーディングツリーブロックの右境界は、スライスの右境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
現在のコーディングツリーブロックの右境界は、サブピクチャの右境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]は0に等しい。

Claims (18)

  1. ピクチャのサンプル値をフィルタリングする方法であって、
    前記方法は、
    前記ピクチャのブロックに対する再構成済みサンプル値を取得するステップと、
    ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得するステップと、
    前記フィルタ係数および前記ブロックに対する前記再構成済みサンプル値に従って総和値を取得するステップと、
    前記ブロック内のサンプルの垂直位置に従って前記総和値を丸め、丸められた総和値を取得するステップと、
    前記丸められた総和値に従って前記ブロックに対するフィルタ再構成済みサンプル値を取得するステップとを含む方法。
  2. 前記丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは前記総和値であり、alfShiftYは前記サンプルの前記垂直位置に基づき決定される変数である請求項1に記載の方法。
  3. 前記サンプルの前記垂直位置が条件、
    y==CtbSizeY-t-1、または
    y==CtbSizeY-t、または
    y==ctbHeightC-t、または
    y==ctbHeightC-t-1
    のうちのいずれか1つで満たされたときに、alfShiftYは10に等しく、
    yは前記サンプルの前記垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である請求項2に記載の方法。
  4. 前記サンプルの前記垂直位置が条件、
    y==CtbSizeY-t-1、または
    y==CtbSizeY-t、または
    y==ctbHeightC-t、または
    y==ctbHeightC-t-1
    のうちのいずれか1つで満たされないときに、alfShiftYは7に等しく、
    yは前記サンプルの前記垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である請求項2または3に記載の方法。
  5. yは0に等しく、alfShiftYは10に等しい請求項2から4のいずれか一項に記載の方法。
  6. yは0に等しくなく、alfShiftYは7に等しい請求項2から5のいずれか一項に記載の方法。
  7. 前記ブロック内の前記サンプルの前記垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である請求項1から6のいずれか一項に記載の方法。
  8. 前記丸めプロセスは、
    加えられた総和値を取得するために前記垂直位置に基づき決定された値を前記総和値に加えるステップと、
    前記垂直位置に基づき前記加えられた総和値をシフトするステップとを含む請求項1から7のいずれか一項に記載の方法。
  9. ビデオデコード装置であって、
    ピクチャのブロックに対する再構成済みサンプル値を取得するように構成されている、再構成モジュールと、
    ビットストリームに従って適応ループフィルタリングのためのフィルタ係数を取得するように構成されている、解析モジュールと、
    前記フィルタ係数および前記ブロックに対する前記再構成済みサンプル値に従って総和値を取得するように構成されている、計算モジュールと、
    前記ブロック内のサンプルの垂直位置に従って前記総和値を丸め、丸められた総和値を取得するように構成されている、丸めモジュールと、
    前記丸められた総和値に従って前記ブロックに対するフィルタ再構成済みサンプル値を取得するように構成されている、フィルタリングモジュールとを備えるビデオデコード装置。
  10. 前記丸められた総和値は、(sum+(1<<(alfShiftY-1)))>>alfShiftYに等しく、sumは前記総和値であり、alfShiftYは前記サンプルの前記垂直位置に基づき決定される変数である請求項9に記載のビデオデコード装置。
  11. 前記サンプルの前記垂直位置が条件、
    y==CtbSizeY-t-1、または
    y==CtbSizeY-t、または
    y==ctbHeightC-t、または
    y==ctbHeightC-t-1
    のうちのいずれか1つで満たされるときに、alfShiftYは10に等しく、
    yは前記サンプルの前記垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である請求項10に記載のビデオデコード装置。
  12. 前記サンプルの前記垂直位置が条件、
    y==CtbSizeY-t-1、または
    y==CtbSizeY-t、または
    y==ctbHeightC-t、または
    y==ctbHeightC-t-1
    のうちのいずれか1つで満たされないときに、alfShiftYは7に等しく、
    yは前記サンプルの前記垂直位置であり、CtbSizeYはコーディングツリーブロック、CTB、のサイズであり、ctbHeightCはCTBの高さであり、tは整数値である請求項10または11に記載のビデオデコード装置。
  13. yは0に等しく、alfShiftYは10に等しい請求項10から12のいずれか一項に記載のビデオデコード装置。
  14. yは0に等しくなく、alfShiftYは7に等しい請求項10から14のいずれか一項に記載のビデオデコード装置。
  15. 前記ブロック内の前記サンプルの前記垂直位置は、クロマサンプル位置であるか、またはルーマサンプル位置である請求項9から14のいずれか一項に記載のビデオデコード装置。
  16. 前記丸めモジュールは、
    前記垂直位置に基づき決定される値を前記総和値に加えて、加えられた総和値を取得し、前記垂直位置に基づき前記加えられた総和値をシフトして、前記丸められた総和値を取得するように構成される請求項9から15のいずれか一項に記載のビデオデコード装置。
  17. デコーダであって、
    1つまたは複数のプロセッサと、
    前記プロセッサに結合され、前記プロセッサによる実行のためのプログラミングを記憶する非一時的コンピュータ可読記憶媒体であって、前記プログラミングは、前記プロセッサによって実行されたときに、請求項1から8のいずれか一項に記載の前記方法を実行するように前記デコーダを構成する、非一時的コンピュータ可読記憶媒体とを備えるデコーダ。
  18. プログラムコードを収めた非一時的コンピュータ可読媒体であって、前記プログラムコードは、コンピュータデバイスによって実行されたときに、請求項1から8のいずれか一項に記載の前記方法を前記コンピュータデバイスに実行させる非一時的コンピュータ可読媒体。
JP2022544809A 2020-01-24 2021-01-22 適応ループフィルタリングのためのエンコーダ、デコーダ、および対応する方法 Pending JP2023511206A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP2020051788 2020-01-24
EPPCT/EP2020/051788 2020-01-24
PCT/CN2021/073233 WO2021147981A1 (en) 2020-01-24 2021-01-22 An encoder, a decoder and corresponding methods for adaptive loop filtering

Publications (1)

Publication Number Publication Date
JP2023511206A true JP2023511206A (ja) 2023-03-16

Family

ID=76993179

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022544809A Pending JP2023511206A (ja) 2020-01-24 2021-01-22 適応ループフィルタリングのためのエンコーダ、デコーダ、および対応する方法

Country Status (13)

Country Link
US (1) US20220377326A1 (ja)
EP (1) EP4085639A4 (ja)
JP (1) JP2023511206A (ja)
KR (1) KR20220127314A (ja)
CN (2) CN115836527A (ja)
AU (1) AU2021210471A1 (ja)
BR (1) BR112022014636A2 (ja)
CA (1) CA3165820A1 (ja)
CL (1) CL2022001991A1 (ja)
IL (1) IL295013A (ja)
MX (1) MX2022009122A (ja)
WO (1) WO2021147981A1 (ja)
ZA (1) ZA202208537B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7467617B2 (ja) 2020-04-26 2024-04-15 テンセント・アメリカ・エルエルシー 幾何学的クロスコンポーネントフィルタリング

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115104302A (zh) 2019-12-11 2022-09-23 抖音视界有限公司 跨分量适应性回路滤波的样点填充
JP2023531223A (ja) * 2020-06-30 2023-07-21 北京字節跳動網絡技術有限公司 適応ループフィルタリングのための境界位置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10694214B2 (en) * 2012-12-21 2020-06-23 Qualcomm Incorporated Multi-type parallelized sample adaptive offset in video coding
GB2516424A (en) * 2013-07-15 2015-01-28 Nokia Corp A method, an apparatus and a computer program product for video coding and decoding
US11405620B2 (en) * 2016-08-01 2022-08-02 Electronics And Telecommunications Research Institute Image encoding/decoding method and apparatus with sub-block intra prediction
EP3750307B1 (en) * 2018-03-09 2023-10-04 Huawei Technologies Co., Ltd. Method and apparatus for image filtering with adaptive multiplier coefficients
US11451773B2 (en) * 2018-06-01 2022-09-20 Qualcomm Incorporated Block-based adaptive loop filter (ALF) design and signaling
WO2020007489A1 (en) * 2018-07-06 2020-01-09 Huawei Technologies Co., Ltd. A picture encoder, a picture decoder and corresponding methods
GB2582029A (en) * 2019-03-08 2020-09-09 Canon Kk An adaptive loop filter
CA3129687A1 (en) * 2019-12-24 2021-07-01 Telefonaktiebolaget Lm Ericsson (Publ) Virtual boundary processing for adaptive loop filtering
US11303892B2 (en) * 2020-01-23 2022-04-12 Qualcomm Incorporated Adaptive rounding for loop filters

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7467617B2 (ja) 2020-04-26 2024-04-15 テンセント・アメリカ・エルエルシー 幾何学的クロスコンポーネントフィルタリング

Also Published As

Publication number Publication date
BR112022014636A2 (pt) 2022-10-11
WO2021147981A1 (en) 2021-07-29
CN116208773A (zh) 2023-06-02
EP4085639A1 (en) 2022-11-09
KR20220127314A (ko) 2022-09-19
CL2022001991A1 (es) 2023-01-27
CN115836527A (zh) 2023-03-21
MX2022009122A (es) 2022-10-27
IL295013A (en) 2022-09-01
AU2021210471A1 (en) 2022-08-25
EP4085639A4 (en) 2023-03-22
ZA202208537B (en) 2023-05-31
US20220377326A1 (en) 2022-11-24
CA3165820A1 (en) 2021-07-29

Similar Documents

Publication Publication Date Title
JP7106744B2 (ja) ルーマおよびクロマ成分についてibc専用バッファおよびデフォルト値リフレッシュを使用するエンコーダ、デコーダおよび対応する方法
JP7271683B2 (ja) エンコーダ、デコーダ、および対応するイントラ予測方法
US11895292B2 (en) Encoder, decoder and corresponding methods of boundary strength derivation of deblocking filter
JP7250917B2 (ja) 補間フィルタを使用するイントラ予測のための方法および装置
US11856228B2 (en) Deblocking filter for sub-partition boundaries caused by intra sub-partition coding tool
US11876997B2 (en) Encoder, decoder and corresponding methods of most probable mode list construction for blocks with multi-hypothesis prediction
US20220014793A1 (en) Encoder, a decoder and corresponding methods of deblocking filter adaptation
WO2021147981A1 (en) An encoder, a decoder and corresponding methods for adaptive loop filtering
JP2022551313A (ja) ピクチャヘッダのシグナリングを簡略化するためのエンコーダ、デコーダ及び対応する方法
US20220264094A1 (en) Usage of DCT Based Interpolation Filter and Enhanced Bilinear Interpolation Filter in Affine Motion Compensation
JP2024055893A (ja) 非線形適応ループフィルタのためのクリッピングレベル
AU2024201152A1 (en) An encoder, a decoder and corresponding methods using intra mode coding for intra prediction
EP4029254B1 (en) Encoder, decoder and corresponding methods using interpolation filtering
WO2020211849A1 (en) Method and apparatus for division-free intra-prediction
JP2023515189A (ja) スライス用のピクチャパーティション情報をシグナリングするためのデコーダ及び対応する方法
WO2021008470A1 (en) An encoder, a decoder and corresponding methods
US20220217346A1 (en) Method and Apparatus for Chrominance QP Offsets Tables Signaling and Derivation
WO2021057755A1 (en) An encoder, a decoder and corresponding methods of complexity reduction on intra prediction for the planar mode
WO2020182079A1 (en) An encoder, a decoder and corresponding methods using intra mode coding for intra prediction

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220902

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220902

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240209

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20240513