KR102185245B1 - 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사 - Google Patents

해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사 Download PDF

Info

Publication number
KR102185245B1
KR102185245B1 KR1020167027484A KR20167027484A KR102185245B1 KR 102185245 B1 KR102185245 B1 KR 102185245B1 KR 1020167027484 A KR1020167027484 A KR 1020167027484A KR 20167027484 A KR20167027484 A KR 20167027484A KR 102185245 B1 KR102185245 B1 KR 102185245B1
Authority
KR
South Korea
Prior art keywords
block
hash
candidate
values
hash value
Prior art date
Application number
KR1020167027484A
Other languages
English (en)
Other versions
KR20160129083A (ko
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 KR20160129083A publication Critical patent/KR20160129083A/ko
Application granted granted Critical
Publication of KR102185245B1 publication Critical patent/KR102185245B1/ko

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/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • 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/136Incoming video signal characteristics or properties
    • H04N19/14Coding unit complexity, e.g. amount of activity or edge presence estimation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/567Motion estimation based on rate distortion criteria
    • 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/46Embedding additional information in the video signal during the compression process
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • 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/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • 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
    • 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/97Matching pursuit coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

해시 테이블 구성 및 이용가능성 검사의 분야에서의 혁신들은 해시 기반 블록 매칭의 계산 복잡도를 감소시킨다. 예를 들어, 혁신들 중 일부는 해시 테이블을 구성하는 프로세스를 가속화시키거나 해시 테이블의 크기를 감소시킨다. 이것은 (블록 벡터 추정을 위한) 픽처 내에서의 또는 (움직임 추정을 위한) 상이한 픽처들 사이에서의 해시 기반 블록 매칭을 가속화시키고 그를 위한 메모리 사용을 감소시킬 수 있다. 다른 혁신들은 해시 테이블을 사용하는 블록 벡터 추정 동안의 이용가능성 검사에 관한 것이다.

Description

해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사{HASH TABLE CONSTRUCTION AND AVAILABILITY CHECKING FOR HASH-BASED BLOCK MATCHING}
본 발명은 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사에 관한 것이다.
엔지니어는 디지털 비디오의 비트 레이트(bit rate)를 감소시키기 위해 압축(compression)(소스 코딩(source coding) 또는 소스 인코딩(source encoding)이라고도 불리움)을 사용한다. 압축은 비디오 정보를 보다 낮은 비트 레이트 형태로 변환함으로써 비디오 정보를 저장하고 전송하는 비용을 감소시킨다. 압축 해제(decompression)(디코딩(decoding)이라고도 불리움)는 압축된 형태로부터 원래 정보(original information)의 버전을 재구성한다. "코덱"은 인코더/디코더 시스템이다.
지난 20년에 걸쳐, ITU-T H.261, H.262(MPEG-2 또는 ISO/IEC 13818-2), H.263 및 H.264(MPEG-4 AVC 또는 ISO/IEC 14496-10) 표준, MPEG-1(ISO/IEC 11172-2) 및 MPEG-4 Visual(ISO/IEC 14496-2) 표준, 및 SMPTE 421M(VC-1) 표준을 비롯한, 다양한 비디오 코덱 표준이 채택되었다. 보다 최근에, H.265/HEVC 표준(ITU-T H.265 또는 ISO/IEC 23008-2)이 승인되었다. (예컨대, 스케일러블 비디오 코딩/디코딩(scalable video coding/decoding)에 대한, 샘플 비트 심도(sample bit depth) 또는 크로마 샘플링 레이트(chroma sampling rate)의 면에서 보다 높은 충실도(fidelity)를 갖는 비디오의 코딩/디코딩에 대한, 화면 포착 콘텐츠에 대한, 또는 멀티뷰 코딩/디코딩(multi-view coding/decoding)에 대한) H.265/HEVC 표준에 대한 확장이 현재 개발 중이다. 비디오 코덱 표준은 전형적으로, 특정의 특징들이 인코딩 및 디코딩에서 사용될 때 비트스트림에서의 파라미터들을 상세히 기술하는, 인코딩된 비디오 비트스트림의 구문(syntax)에 대한 옵션들을 정의한다. 많은 경우에, 비디오 코덱 표준은 또한 디코더가 디코딩에서 부합하는 결과를 달성하기 위해 수행해야만 하는 디코딩 동작에 관한 상세를 제공한다. 코덱 표준 이외에, 다양한 독점적 코덱 포맷(proprietary codec format)은 인코딩된 비디오 비트스트림의 구문에 대한 다른 옵션들 및 대응하는 디코딩 동작들을 정의한다.
인트라 BC(block copy: 블록 복사)는 H.265/HEVC 확장을 위해 개발 중인 예측 모드이다. 인트라 BC 예측 모드에 있어서, 픽처의 현재 블록의 샘플 값들이 동일한 픽처에서의 이전에 재구성된 샘플 값들을 사용하여 예측된다. BV(block vector: 블록 벡터)는 현재 블록으로부터 예측을 위해 사용된 이전에 재구성된 샘플 값을 포함하는 픽처의 영역까지의 변위(displacement)를 나타낸다. BV가 비트스트림에서 시그널링된다. 인트라 BC 예측은 인트라 픽처 예측의 일 형태이다 - 픽처의 블록에 대한 인트라 BC 예측은 동일한 픽처 내의 샘플 값들 이외의 어떤 샘플 값들도 사용하지 않는다 -.
H.265/HEVC 표준에 현재 명시되고 H.265/HEVC 표준에 대한 일부 참조 소프트웨어(reference software)에서 구현되는 바와 같이, 인트라 BC 예측 모드는 몇 가지 문제점이 있다. 상세하게는, 인트라 BC 예측에서 어느 BV 값들을 사용할지에 관한 인코더측 결정이 효과적으로 행해지지 않는다.
요약하면, 상세한 설명은 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사의 분야에서의 혁신들을 제시한다. 예를 들어, 혁신들 중 일부는 BV(block vector) 추정 또는 움직임 추정 동안 해시 기반 블록 매칭에서 사용되는 해시 테이블을 구성하는 프로세스를 가속화시키거나 해시 테이블의 크기(size)를 감소시키는 방식들에 관한 것이다. 다른 혁신들은 해시 테이블을 사용하는 BV 추정 동안의 이용가능성 검사에 관한 것이다.
본원에 기술되는 혁신들의 제1 양태에 따르면, 이미지 또는 비디오 인코더는 다수의 후보(candidate) 블록들 중 주어진 후보 블록에 대한 블록 해시 값(hash value)을 결정한다. 주어진 후보 블록의 다수의 섹션들(예컨대, 행, 열, 서브블록(sub-block)) 각각에 대해, 인코더는 중간(intermediate) 해시 값을 찾는다. 다수의 섹션들은 원래의 샘플 값 또는 재구성된 샘플 값을 포함할 수 있다.
인코더는 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 주어진 후보 블록에 대한 블록 해시 값을 계산한다. 중간 해시 값들 및 주어진 후보 블록에 대한 블록 해시 값이 동일한 해시 함수 또는 상이한 해시 함수들을 사용하여 계산될 수 있다. 인코더는 하나 이상의 다른 후보 블록들에 대한 블록 해시 값들을 계산하는데 재사용하기 위해 중간 해시 값들 중 적어도 일부를 유지한다. 인코더는 주어진 후보 블록에 대한 블록 해시 값을 해시 테이블에 추가한다. 다른 후보 블록들에 대한 블록 해시 값들을 계산할 때 유지된 중간 해시 값들을 재사용함으로써, 인코더는 해시 테이블을 구성하는 프로세스를 가속화시킨다.
예를 들어, 주어진 후보 블록의 다수의 섹션들은 주어진 후보 블록에서의 샘플 값들의 행들이다. 주어진 후보 블록과 부분적으로 중복(overlap)되지만 정수 개의 샘플 값들만큼 수직으로 오프셋되어 있는 후보 블록들에 대한 블록 해시 값들을 계산하는데 (행들에 대한) 중간 해시 값들이 재사용될 수 있다. 단일의 샘플만큼 수직으로 오프셋되어 있는 수직으로 중복되는 블록들의 블록 열에 대해 블록 해시 값들이 연속적으로(successively) 결정될 수 있고, 단일의 샘플만큼 수평으로 오프셋되어 있는 블록 열들에 대해 블록열마다 기반(block column-by-block column basis)하여 반복한다.
또는, 다른 예로서, 주어진 후보 블록의 다수의 섹션들은 주어진 후보 블록에서의 샘플 값들의 열들이다. 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 샘플 값들만큼 수평으로 오프셋되어 있는 후보 블록들에 대한 블록 해시 값들을 계산하는데 (열들에 대한) 중간 해시 값들이 재사용될 수 있다. 단일의 샘플만큼 수평으로 오프셋되어 있는 수평으로 중복되는 블록들의 블록 행에 대해 블록 해시 값들이 연속적으로 결정될 수 있고, 단일의 샘플만큼 수직으로 오프셋되어 있는 블록 행들에 대해 블록행마다 기반(block row-by-block row basis)하여 반복한다.
또는, 다른 예로서, 주어진 후보 블록의 다수의 섹션들은 주어진 후보 블록에서의 샘플 값들의 서브블록들이다. 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 서브블록들만큼 수평으로 오프셋되어 있는 후보 블록들에 대한 블록 해시 값들을 계산하는데 (서브블록들에 대한) 중간 해시 값들이 재사용될 수 있다.
이러한 방식으로 구성된 해시 테이블이 BV 추정 또는 움직임 추정에서 사용될 수 있다. 예를 들어, BV 추정을 위해, 현재 픽처(current picture)는 해시 테이블에서의 블록 해시 값들을 갖는 다수의 후보 블록들을 포함한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하고, 이어서 그와 매칭되는 블록 해시 값을 갖는 (현재 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 해시 테이블을 검색한다. 또는, 움직임 추정을 위해, 참조 픽처는 해시 테이블에서의 블록 해시 값들을 갖는 다수의 후보 블록들을 포함한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하고, 이어서 그와 매칭되는 블록 해시 값을 갖는 (참조 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 해시 테이블을 검색한다. 어쨋든, 현재 블록에 대한 블록 해시 값이 해시 테이블에서의 블록 해시 값들과 동일한 해싱 접근법을 사용하여 결정된다.
본원에 기술되는 혁신의 다른 양태에 따르면, 이미지 또는 비디오 인코더는 해시 테이블 구성을 가속화시키기 위해 계층적 해싱(hierarchical hashing)을 사용한다. 상세하게는, 다수의 후보 블록들 각각에 대해, 인코더는 블록 해시 값을 결정한다. 예를 들어, 인코더는 후보 블록의 섹션들(예컨대, 행, 열, 서브블록)에 대한 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 블록 해시 값을 결정한다. 인코더는 후보 블록들에 대한 블록 해시 값들을 하나 이상의 해시 테이블들에 추가한다.
후보 블록들 중 적어도 일부가 후보 수퍼블록(super-block)들로서 구성된다. 인코더는 또한, 다수의 후보 수퍼블록들 각각에 대해, 후보 수퍼블록의 후보 블록들에 대한 블록 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 수퍼블록 해시 값을 결정한다. 인코더는 후보 수퍼블록들에 대한 수퍼블록 해시 값들을 하나 이상의 해시 테이블들에 추가한다.
예를 들어, 해시 테이블(들)은 다수의 후보 블록들에 대한 블록 해시 값들을 저장하는 제1 해시 테이블 및 다수의 후보 수퍼블록들에 대한 수퍼블록 해시 값들을 저장하는 제2 해시 테이블을 포함한다. 이러한 방식으로 구성된 해시 테이블은 현재 픽처의 현재 블록 또는 현재 수퍼블록에 대한 BV 추정 또는 움직임 추정에서 사용될 수 있다.
본원에 기술되는 혁신의 다른 양태에 따르면, 이미지 또는 비디오 인코더는 일부 후보 블록들에 대한 블록 해시 값들을 해시 테이블로부터 선택적으로 생략함으로써 해시 테이블 크기를 감소시킨다. 상세하게는, 다수의 후보 블록들 각각에 대해, 인코더는 후보 블록이 복잡도 기준(complexity criterion)을 충족시키는지의 여부를 평가(evaluating)한다. 그러한 경우, 인코더는 후보 블록에 대한 블록 해시 값을 결정하고 블록 해시 값을 해시 테이블에 추가한다. 블록 해시 값이 원래의 샘플 값들 또는 재구성된 샘플 값들을 사용하여 계산될 수 있다. 후보 블록이 복잡도 기준을 충족시키지 않는 경우, 인코더는 후보 블록에 대한 블록 해시 값을 결정하지 않는다. 이러한 방식으로 구성된 해시 테이블이 BV 추정 또는 움직임 추정에서 사용될 수 있다.
예를 들어, (a) 주어진 후보 블록의 적어도 하나의 행이 불균일한(non-uniform) 샘플 값들을 갖는 경우 그리고/또는 (b) 주어진 후보 블록의 적어도 하나의 열이 불균일한 샘플 값들을 갖는 경우, 주어진 후보 블록에 대해 복잡도 기준이 충족된다. 이 기준을 사용해, 인코더는, 아마도 인트라 공간 예측에 의해 효율적으로 예측될 수 있는, 균일한 블록들, 균일한 샘플 값들의 행들을 갖는 블록들, 및 균일한 샘플 값들의 열들을 갖는 블록들을 걸러낼 수 있다. 보다 일반적으로, 주어진 후보 블록이 복잡도 기준을 충족시키는지의 여부를 평가할 때, 인코더는 후보 블록에 대한 복잡도 메트릭(metric)을 계산하고 복잡도 메트릭을 문턱값과 비교할 수 있다.
본원에 기술되는 혁신의 다른 양태에 따르면, BV 추정 동안 해시 기반 블록 매칭을 위해 해시 테이블을 사용할 때, 이미지 또는 비디오 인코더는 매칭되는 후보 블록이 참조 영역(reference region)으로서 사용하기 위해 이용가능한지의 여부를 신속하게 검사한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정한다. 인코더는 그와 매칭되는 블록 해시 값을 갖는 (현재 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 해시 테이블을 검색한다. 현재 블록에 대한 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 주어진 후보 블록에 대해, 인코더는 인트라 블록 복사 예측에서 현재 블록에 대한 참조 영역으로서 사용하기 위한 주어진 후보 블록의 이용가능성을 검사한다. 예를 들어, 인코더는 (a) 주어진 후보 블록이 코딩 순서(order)(디코딩 순서라고도 불리움)에서 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함한다는 것과 (b) 주어진 후보 블록 및 현재 블록이 동일한 슬라이스의 일부 및 동일한 타일의 일부인지를 검사한다.
해시 테이블 구성 및 이용가능성 검사에 대한 혁신들은 방법의 일부로서, 방법을 수행하도록 적용된 컴퓨팅 디바이스의 일부로서, 또는 컴퓨팅 디바이스로 하여금 방법을 수행하게 하기 위한 컴퓨터 실행가능 명령어들을 저장하는 유형적 컴퓨터 판독가능 매체(tangible computer-readable media)의 일부로서 구현될 수 있다. 다양한 혁신들이 결합하여 또는 개별적으로 사용될 수 있다. 상세하게는, 해시 테이블 구성 동안, 인코더는 계층적 해싱 및/또는 복잡도 기준에 따라 후보 블록들을 걸러내는 것과 관련하여 유지된 중간 해시 값들을 재사용할 수 있다. 해시 테이블 구성을 위한 혁신들 중 임의의 혁신을 사용하여 생성된 해시 테이블이 이용가능성 검사를 위한 혁신들과 관련하여 사용될 수 있다.
본 발명의 전술한 목적, 특징 및 장점 그리고 다른 목적, 특징 및 장점이, 첨부 도면을 참조하여 계속되는, 이하의 발명을 실시하기 위한 구체적인 내용으로부터 보다 명백하게 될 것이다.
도 1은 일부 기술된 실시예들이 구현될 수 있는 예시적인 컴퓨팅 시스템을 나타낸 도면이다.
도 2a 및 도 2b는 일부 기술된 실시예들이 구현될 수 있는 예시적인 네트워크 환경을 나타낸 도면이다.
도 3은 일부 기술된 실시예들이 구현될 수 있는 예시적인 인코더 시스템을 나타낸 도면이다.
도 4는 일부 기술된 실시예들이 구현될 수 있는 예시적인 디코더 시스템을 나타낸 도면이다.
도 5a 및 도 5b는 일부 기술된 실시예들이 구현될 수 있는 제1 예시적인 비디오 인코더를 나타낸 도면이다.
도 6a 및 도 6b는 일부 기술된 실시예들이 구현될 수 있는 제2 예시적인 비디오 인코더를 나타낸 도면이다.
도 7은 일부 기술된 실시예들이 구현될 수 있는 제1 예시적인 비디오 디코더를 나타낸 도면이다.
도 8은 일부 기술된 실시예들이 구현될 수 있는 제2 예시적인 비디오 디코더를 나타낸 도면이다.
도 9 및 도 10은 블록 매칭에서 프레임의 블록 및 블록에 대한 후보 블록들에 대한 인트라 BC 예측을 나타낸 도면이다.
도 11은 예시적인 프레임의 블록에 대한 블록 매칭에서 후보 블록들의 개수를 나타낸 도면이다.
도 12는 해시 기반 블록 매칭에서 후보 블록들에 대한 해시 값들을 나타낸 표이다.
도 13a 내지 도 13c는 해시 기반 블록 매칭을 위한 후보 블록들을 구성하는 예시적인 데이터 구조들을 나타낸 표이다.
도 14a 내지 도 14c는 반복적 해시 기반 블록 매칭을 위한 후보 블록들을 구성하는 예시적인 데이터 구조들을 나타낸 표이다.
도 15a 및 도 15b는 해시 테이블 구성 동안 후보 블록들의 행들에 대한 중간 해시 값들의 해싱을 나타낸 도면이다.
도 16a 및 도 16b는 해시 테이블 구성 동안 후보 블록들의 열들에 대한 중간 해시 값들의 해싱을 나타낸 도면이다.
도 17a 및 도 17b는 해시 테이블 구성 동안 후보 블록들의 서브블록들에 대한 중간 해시 값들의 해싱을 나타낸 도면이다.
도 18은 중간 해시 값들의 해싱 및 유지에 의한 해시 테이블 구성에 대한 기법을 나타낸 플로우차트이다.
도 19a 및 도 19b는 해시 테이블 구성 동안 계층적 해싱을 나타낸 도면이다.
도 20은 계층적 해싱에 의한 해시 테이블 구성에 대한 기법을 나타낸 플로우차트이다.
도 21a 내지 도 21c는 해시 테이블 구성 동안 인코더가 걸러내는 후보 블록들의 패턴들을 나타낸 도면이다.
도 22는 해시 테이블 구성 동안 복잡도 기준을 사용하여 후보 블록들을 걸러내는 기법을 나타낸 플로우차트이다.
도 23은 BV 추정 동안 참조 영역들일 수 있는 후보 블록들에 대한 조건들을 나타낸 도면이다.
도 24는 픽처의 블록들에 대한 예시적인 z-스캔(z-scan) 순서를 나타낸 도면이다.
도 25는 BV 추정 동안 블록 이용가능성 검사에 대한 기법을 나타낸 플로우차트이다.
상세한 설명은 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사의 분야에서의 혁신들을 제시한다. 예를 들어, 혁신들 중 일부는 해시 테이블을 구성하는 프로세스를 가속화시키거나 해시 테이블의 크기를 감소시키는 방식들에 관한 것이다. 이것은 해시 기반 블록 매칭을 가속화시키고 (BV(block vector) 추정을 위한) 픽처 내에서의 또는 (움직임 추정을 위한) 상이한 픽처들 사이에서의 해시 기반 블록 매칭을 위한 메모리 사용을 감소시킬 수 있다. 다른 혁신들은 해시 테이블을 사용하는 BV 추정 동안의 이용가능성 검사에 관한 것이다.
본원에 기술되는 동작들이 여러 곳에서 비디오 인코더 또는 비디오 디코더에 의해 수행되는 것으로 기술되어 있지만, 많은 경우에, 동작들이 다른 유형의 미디어 처리 도구(예컨대, 이미지 인코더 또는 디코더)에 의해 수행될 수 있다.
본원에 기술되는 혁신들 중 일부는 H.265/HEVC 표준에 특유한 구문 요소(syntax element)들 및 동작들을 참조하여 설명된다. 예를 들어, H.265/HEVC 표준의 초안 버전 JCTVC-P1005 - "High Efficiency Video Coding (HEVC) Range Extensions Text Specification: Draft 6," JCTVC-P1005 v1, February 2014 - 가 참조된다. 본원에 기술되는 혁신들은 또한 다른 표준들 또는 포맷들에 대해 구현될 수 있다.
(예컨대, 해시 테이블 구성을 위한) 본원에 기술되는 혁신들 중 일부는 여러 곳에서 BV 추정 및 인트라 BC 예측을 참조하여 기술된다. 혁신들이 또한 다른 상황들(예컨대, 움직임 추정 및 보상)에서 적용될 수 있다.
보다 일반적으로, 본원에 기술되는 예들에 대한 다양한 대안들이 가능하다. 예를 들어, 본원에 기술되는 방법들 중 일부가 기술된 방법 동작들의 순서를 변경하는 것에 의해, 특정의 방법 동작들을 분할, 반복 또는 생략하는 것에 의해, 기타에 의해 수정될 수 있다. 개시되는 기술의 다양한 양태들이 결합하여 또는 개별적으로 사용될 수 있다. 상이한 실시예들이 기술되는 혁신들 중 하나 이상을 사용한다. 본원에 기술되는 혁신들 중 일부는 배경 기술에서 살펴본 문제점들 중 하나 이상을 해결한다. 전형적으로, 주어진 기법/도구가 이러한 문제점들 모두를 해결하지는 않는다.
I. 예시적인 컴퓨팅 시스템
도 1은 기술되는 혁신들 중 몇몇이 구현될 수 있는 적당한 컴퓨팅 시스템(100)의 일반화된 예를 나타낸 것이다. 혁신들이 다양한 범용 또는 특수 목적 컴퓨팅 시스템에서 구현될 수 있기 때문에, 컴퓨팅 시스템(100)은 용도 또는 기능의 범주에 관한 어떤 제한을 암시하는 것으로 의도되어 있지 않다.
도 1을 참조하면, 컴퓨팅 시스템(100)은 적어도 하나의 처리 유닛들(110, 115) 및 메모리(120, 125)를 포함한다. 처리 유닛들(110, 115)은 컴퓨터 실행가능 명령어들을 실행한다. 처리 유닛은 범용 CPU(central processing unit), ASIC(application-specific integrated circuit) 내의 프로세서, 또는 임의의 다른 유형의 프로세서일 수 있다. 다중 처리 시스템(multi-processing system)에서는, 처리 능력을 증가시키기 위해 다수의 처리 유닛들이 컴퓨터 실행가능 명령어들을 실행한다. 예를 들어, 도 1은 중앙 처리 유닛(central processing unit)(110)은 물론, 그래픽 처리 유닛 또는 코프로세싱 유닛(coprocessing unit)(115)을 나타내고 있다. 유형적 메모리(tangible memory)(120, 125)는 처리 유닛(들)에 의해 액세스가능한, 휘발성 메모리(예컨대, 레지스터, 캐시, RAM), 비휘발성 메모리(예컨대, ROM, EEPROM, 플래시 메모리 등), 또는 이 둘의 어떤 조합일 수 있다. 메모리(120, 125)는 처리 유닛(들)에 의한 실행에 적당한 컴퓨터 실행가능 명령어들의 형태로, 해시 기반 블록 매칭을 위한 해시 테이블 구성 및/또는 이용가능성 검사에 대한 하나 이상의 혁신들을 구현하는 소프트웨어(180)를 저장한다.
컴퓨팅 시스템은 부가의 특징들을 가질 수 있다. 예를 들어, 컴퓨팅 시스템(100)은 저장소(140), 하나 이상의 입력 디바이스들(150), 하나 이상의 출력 디바이스들(160), 및 하나 이상의 통신 연결들(170)을 포함한다. 버스, 제어기 또는 네트워크와 같은 상호연결 메커니즘(도시되지 않음)은 컴퓨팅 시스템(100)의 컴포넌트들을 상호연결시킨다. 전형적으로, 운영 체제 소프트웨어(도시되지 않음)는 컴퓨팅 시스템(100)에서 실행 중인 다른 소프트웨어에 대한 운영 환경을 제공하고, 컴퓨팅 시스템(100)의 컴퓨팅 시스템들의 활동을 조율한다.
유형적 저장소(140)는 이동식 또는 비이동식일 수 있고, 정보를 저장하는데 사용될 수 있고 컴퓨팅 시스템(100) 내에서 액세스될 수 있는, 자기 디스크, 자기 테이프 또는 카세트, CD-ROM, DVD, 또는 임의의 다른 매체를 포함한다. 저장소(140)는 해시 기반 블록 매칭을 위한 해시 테이블 구성 및/또는 이용가능성 검사에 대한 하나 이상의 혁신들을 구현하는 소프트웨어(180)에 대한 명령어들을 저장한다.
입력 디바이스(들)(150)는 컴퓨팅 시스템(100)에 입력을 제공하는 키보드, 마우스, 펜, 또는 트랙볼과 같은 터치 입력 디바이스, 음성 입력 디바이스, 스캐닝 디바이스, 또는 다른 디바이스일 수 있다. 비디오의 경우, 입력 디바이스(들)(150)는 아날로그 또는 디지털 형태로 비디오 입력을 받아들이는 카메라, 비디오 카드, TV 튜너 카드, 화면 포착 모듈, 또는 유사한 디바이스, 또는 비디오 입력을 컴퓨팅 시스템(100) 내로 읽어들이는 CD-ROM 또는 CD-RW일 수 있다. 출력 디바이스(들)(160)는 컴퓨팅 시스템(100)으로부터의 출력을 제공하는 디스플레이, 프린터, 스피커, CD 라이터(CD-writer), 또는 다른 디바이스일 수 있다.
통신 연결(들)(170)은 통신 매체를 통한 다른 컴퓨팅 엔터티와의 통신을 가능하게 한다. 통신 매체는 컴퓨터 실행가능 명령어들, 오디오 또는 비디오 입력 또는 출력, 또는 다른 데이터와 같은 정보를 피변조 데이터 신호(modulated data signal)로 전달한다. 피변조 데이터 신호는 신호의 특성들 중 하나 이상이 정보를 그 신호에 인코딩하는 방식으로 설정되거나 변경된 신호이다. 제한이 아닌 예로서, 통신 매체는 전기, 광, RF, 또는 다른 반송파를 사용할 수 있다.
혁신들이 일반적으로 컴퓨터 판독가능 매체와 관련하여 기술되어 있을 수 있다. 컴퓨터 판독가능 매체는 컴퓨팅 환경 내에서 액세스될 수 있는 임의의 이용가능한 유형적 매체이다. 제한이 아닌 예로서, 컴퓨팅 시스템(100)에서, 컴퓨터 판독가능 매체는 메모리(120, 125), 저장소(140), 및 상기한 것들 중 임의의 것의 조합들을 포함한다.
혁신들이 일반적으로 컴퓨팅 시스템에서 실제 또는 가상의 대상 프로세서 상에서 실행되는, 프로그램 모듈들에 포함된 것과 같은, 컴퓨터 실행가능 명령어들과 관련하여 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정의 작업들을 수행하거나 특정의 추상 데이터 형식들을 구현하는 루틴, 프로그램, 라이브러리, 객체, 클래스, 컴포넌트, 데이터 구조 등을 포함한다. 프로그램 모듈의 기능이 다양한 실시예에서 원하는 바에 따라 프로그램 모듈들 간에 결합되거나 분할될 수 있다. 프로그램 모듈에 대한 컴퓨터 실행가능 명령어는 로컬 또는 분산 컴퓨팅 시스템 내에서 실행될 수 있다.
"시스템"과 "디바이스"라는 용어는 본원에서 서로 바꾸어 사용될 수 있다. 문맥이 명백히 달리 나타내지 않는 한, 어느 용어도 컴퓨팅 시스템 또는 컴퓨팅 디바이스의 유형에 대한 어떤 제한을 암시하지 않는다. 일반적으로, 컴퓨팅 시스템 또는 컴퓨팅 디바이스는 로컬이거나 분산되어 있을 수 있고, 본원에 기술되는 기능을 구현하는 소프트웨어를 갖는 특수 목적 하드웨어 및/또는 범용 하드웨어의 임의의 조합을 포함할 수 있다.
개시되는 방법이 또한 개시되는 방법들 중 임의의 방법을 수행하도록 구성된 특수 컴퓨팅 하드웨어를 사용하여 구현될 수 있다. 예를 들어, 개시되는 방법은 개시되는 방법들 중 임의의 방법을 구현하도록 특수 설계되거나 구성된 집적 회로(예컨대, ASIC DSP(digital signal process unit)와 같은 ASIC, GPU(graphics processing unit), 또는 FPGA(field programmable gate array)와 같은 PLD(programmable logic device))에 의해 구현될 수 있다.
제시를 위해, 발명을 실시하기 위한 구체적인 내용은 컴퓨팅 시스템에서의 컴퓨터 동작을 기술하기 위해 "결정한다" 및 "사용한다"와 같은 용어를 사용한다. 이 용어들은 컴퓨터에 의해 수행되는 동작들에 대한 상위 레벨 추상화이고, 사람에 의해 수행되는 동작들과 혼동되어서는 안된다. 이 용어들에 대응하는 실제 컴퓨터 동작들은 구현에 따라 다르다.
II. 예시적인 네트워크 환경
도 2a 및 도 2b는 비디오 인코더(220) 및 비디오 디코더(270)를 포함하는 예시적인 네트워크 환경(201, 202)을 나타낸 것이다. 인코더(220) 및 디코더(270)는 적절한 통신 프로토콜을 사용하여 네트워크(250)를 통해 연결된다. 네트워크(250)는 인터넷 또는 다른 컴퓨터 네트워크를 포함할 수 있다.
도 2a에 도시된 네트워크 환경(201)에서, 각각의 RTC(real-time communication: 실시간 통신) 도구(210)는 양방향 통신을 위해 인코더(220) 및 디코더(270) 둘 다를 포함한다. 주어진 인코더(220)는 H.265/HEVC 표준, SMPTE 421M 표준, ISO-IEC 14496-10 표준(H.264 또는 AVC라고도 알려져 있음), 다른 표준, 또는 독점적 포맷의 변형 또는 확장과 호환되는 출력을 생성할 수 있고, 대응하는 디코더(270)는 인코더(220)부터 인코딩된 데이터를 받는다. 양방향 통신은 화상 회의, 화상 전화 통화, 또는 다른 양자간 또는 다자간 통신 시나리오의 일부일 수 있다. 도 2a에서의 네트워크 환경(201)이 2 개의 실시간 통신 도구(210)를 포함하지만, 네트워크 환경(201)이 그 대신에 다자간 통신에 참여하는 3 개 이상의 실시간 통신 도구(210)를 포함할 수 있다.
실시간 통신 도구(210)는 인코더(220)에 의한 인코딩을 관리한다. 도 3은 실시간 통신 도구(210)에 포함될 수 있는 예시적인 인코더 시스템(300)을 나타낸 것이다. 대안적으로, 실시간 통신 도구(210)는 다른 인코더 시스템을 사용한다. 실시간 통신 도구(210)는 디코더(270)에 의한 디코딩도 관리한다. 도 4는 실시간 통신 도구(210)에 포함될 수 있는 예시적인 디코더 시스템(400)을 나타낸 것이다. 대안적으로, 실시간 통신 도구(210)는 다른 디코더 시스템을 사용한다.
도 2b에 도시된 네트워크 환경(202)에서, 인코딩 도구(212)는 디코더(270)를 포함하는 다수의 재생 도구(214)로 전달하기 위한 비디오를 인코딩하는 인코더(220)를 포함한다. 비디오가 인코딩되어 하나의 장소로부터 하나 이상의 다른 장소로 송신되는 비디오 감시 시스템, 웹 카메라 모니터링 시스템, 화면 포착 모듈, 원격 데스크톱 회의 프레젠테이션 또는 다른 시나리오를 위해 단방향 통신이 제공될 수 있다. 도 2b에서의 네트워크 환경(202)이 2 개의 재생 도구(214)를 포함하지만, 네트워크 환경(202)은 더 많거나 더 적은 수의 재생 도구(214)를 포함할 수 있다. 일반적으로, 재생 도구(214)는 재생 도구(214)가 수신할 비디오 스트림을 결정하기 위해 인코딩 도구(212)와 통신한다. 재생 도구(214)는 스트림을 수신하고, 수신된 인코딩된 데이터를 적절한 기간 동안 버퍼링하며, 디코딩 및 재생을 시작한다.
도 3은 인코딩 도구(212)에 포함될 수 있는 예시적인 인코더 시스템(300)을 나타낸 것이다. 대안적으로, 인코딩 도구(212)는 다른 인코더 시스템을 사용한다. 인코딩 도구(212)는 또한 하나 이상의 재생 도구들(214)과의 연결들을 관리하기 위한 서버측 제어기 논리(server-side controller logic)를 포함할 수 있다. 도 4는 재생 도구(14)에 포함될 수 있는 예시적인 디코더 시스템(400)을 나타낸 것이다. 대안적으로, 재생 도구(214)는 다른 디코더 시스템을 사용한다. 재생 도구(214)는 또한 인코딩 도구(212)와의 연결을 관리하기 위한 클라이언트측 제어기 논리(client-side controller logic)를 포함할 수 있다.
III. 예시적인 인코더 시스템
도 3은 일부 기술된 실시예들이 구현될 수 있는 예시적인 인코더 시스템(300)의 블록도이다. 인코더 시스템(300)은 실시간 통신을 위한 저대기시간(low-latency) 인코딩 모드, 트랜스코딩 모드(transcoding mode), 및 파일 또는 스트림으로부터 재생을 위한 미디어를 생성하기 위한 고대기시간(higher-latency) 인코딩 모드와 같은 다수의 인코딩 모드들 중 임의의 인코딩 모드에서 동작할 수 있는 범용 인코딩 도구일 수 있거나, 하나의 이러한 인코딩 모드를 위해 적용된 특수 목적 인코딩 도구일 수 있다. 인코더 시스템(300)은 특정 유형의 콘텐츠(예컨대, 화면 포착 콘텐츠)를 인코딩하도록 적용될 수 있다. 인코더 시스템(300)은 운영 체제 모듈로서, 애플리케이션 라이브러리의 일부로서 또는 독립형 애플리케이션으로서 구현될 수 있다. 일반적으로, 인코더 시스템(300)은 비디오 소스(310)로부터 소스 비디오 프레임들(311)의 시퀀스를 수신하고 인코딩된 데이터를 채널(390)로의 출력으로서 생성한다. 채널로 출력되는 인코딩된 데이터는 해시 기반 블록 매칭을 사용하여 인코딩된 콘텐츠를 포함할 수 있다.
비디오 소스(310)는 카메라, 튜너 카드, 저장 매체, 화면 포착 모듈, 또는 다른 디지털 비디오 소스일 수 있다. 비디오 소스(310)는, 예를 들어, 초당 30 프레임의 프레임 레이트(frame rate)로 비디오 프레임들의 시퀀스를 생성한다. 본원에서 사용되는 바와 같이, "프레임"이라는 용어는 일반적으로 소스, 코딩된 또는 재구성된 이미지 데이터를 지칭한다. 순차 주사 비디오(progressive-scan video)의 경우, 프레임은 순차 주사 비디오 프레임(progressive-scan video frame)이다. 인터레이스 비디오(interlaced video)의 경우, 예시적인 실시예들에서, 인터레이스 비디오 프레임(interlaced video frame)은 인코딩 이전에 디인터레이스(de-interlace)될 수 있다. 대안적으로, 2 개의 상보적인 인터레이스 비디오 필드들이 함께 단일의 비디오 프레임으로서 인코딩되거나 2 개의 개별적으로 인코딩된 필드로서 인코딩된다. 순차 주사 비디오 프레임 또는 비월 주사 비디오 프레임(interlaced-scan video frame)을 나타내는 것 이외에, "프레임" 또는 "픽처"라는 용어는 단일의 쌍이 아닌 비디오 필드(single non-paired video field), 상보적인 비디오 필드 쌍, 주어진 때의 비디오 객체를 표현하는 비디오 객체 평면(video object plane), 또는 보다 큰 이미지에서의 관심 영역을 나타낼 수 있다. 비디오 객체 평면 또는 영역은 장면의 다수의 객체들 또는 영역들을 포함하는 보다 큰 이미지의 일부일 수 있다.
도착하는 소스 프레임(311)은 다수의 프레임 버퍼 저장 구역들(321, 322, ..., 32n)을 포함하는 소스 프레임 임시 메모리 저장 구역(320)에 저장된다. 프레임 버퍼(321, 322 등)는 소스 프레임 저장 구역(320)에 하나의 소스 프레임을 보유한다. 소스 프레임들(311) 중 하나 이상이 프레임 버퍼들(321, 322 등)에 저장된 후에, 프레임 선택기(frame selector)(330)는 소스 프레임 저장 구역(320)으로부터 개개의 소스 프레임을 선택한다. 프레임들이 인코더(340)에 입력하기 위해 프레임 선택기(330)에 의해 선택되는 순서는 프레임들이 비디오 소스(310)에 의해 생성되는 순서와 상이할 수 있다(예컨대, 어떤 나중의 프레임들이 먼저 인코딩될 수 있게 하고 따라서 시간상 역방향 예측(temporally backward prediction)을 용이하게 하기 위해, 어떤 프레임들의 인코딩이 순서가 지연될 수 있다). 인코더(340)보다 앞에, 인코더 시스템(300)은 인코딩 이전에 선택된 프레임(331)의 전처리(pre-processing)(예컨대, 필터링)를 수행하는 전처리기(pre-processor)(도시되지 않음)를 포함할 수 있다. 전처리는 또한 주 성분(primary component)(예컨대, 루마(luma) 성분) 및 보조 성분(secondary component)(예컨대, 적색에 대한 색차(chroma difference) 성분 및 청색에 대한 색차 성분)로의 색 공간 변환(color space conversion) 및 (예컨대, 크로마 성분(chroma component)의 공간 분해능을 감소시키기 위한) 재샘플링 처리를 포함할 수 있다. 전형적으로, 인코딩 이전에, 비디오는 YUV와 같은 색 공간으로 변환되었고, 여기서 루마(luma)(Y) 성분의 샘플 값은 밝기 또는 휘도 값을 나타내고, 크로마(chroma)(U, V) 성분의 샘플 값은 색차 값(color-difference value)을 나타낸다. 색차 값(그리고 YUV 색차 값으로부터 RGB와 같은 다른 색 공간으로의/YUV 색 공간으로의 변환)의 정확한 정의는 구현에 따라 따르다. 일반적으로, 본원에서 사용되는 바와 같이, YUV라는 용어는 Y'UV, YIQ, Y'lQ 및 YDbDr은 물론, YCbCr and YCoCg와 같은 변형을 비롯한, 루마(또는 루미넌스(luminance)) 성분과 하나 이상의 크로마(또는 크로미넌스(chrominance)) 성분을 갖는 임의의 색 공간을 나타낸다. 크로마 샘플 값들은 (예컨대, YUV 4:2:0 포맷에 대해) 보다 낮은 크로마 샘플링 레이트로 서브샘플링될 수 있거나, 크로마 샘플 값들은 (예컨대, YUV 4:4:4 포맷에 대해) 루마 샘플 값들과 동일한 해상도를 가질 수 있다. 또는, 비디오가 다른 포맷(예컨대, RGB 4:4:4 포맷)으로 인코딩될 수 있다.
인코더(340)는, 코딩된 프레임(341)을 생성하기 위해, 선택된 프레임(331)을 인코딩하고, 또한 MMCO(memory management control operation: 메모리 관리 제어 동작) 신호(342) 또는 RPS(reference picture set: 참조 픽처 세트) 정보를 생성한다. RPS는 현재 프레임 또는 임의의 후속 프레임에 대한 움직임 보상에서 참조를 위해 사용될 수 있는 프레임들의 세트이다. 현재 프레임이 인코딩된 첫 번째 프레임이 아닌 경우, 그의 인코딩 프로세스를 수행할 때, 인코더(340)는 디코딩된 프레임 임시 메모리 저장 구역(360)에 저장된 하나 이상의 이전에 인코딩된/디코딩된 프레임(369)을 사용할 수 있다. 이러한 저장된 디코딩된 프레임(369)은 현재 소스 프레임(331)의 콘텐츠의 인터 프레임 예측(inter-frame prediction)을 위한 참조 프레임(reference frame)으로서 사용된다. MMCO/RPS 정보(342)는 어느 재구성된 프레임이 참조 프레임으로서 사용될 수 있고 따라서 프레임 저장 구역에 저장되어야만 하는지를 디코더에게 알려준다.
일반적으로, 인코더(340)는 타일들로 분할하는 것, 인트라 예측 추정 및 예측, 움직임 추정 및 보상, 주파수 변환, 양자화 및 엔트로피 코딩과 같은 인코딩 작업을 수행하는 다수의 인코딩 모듈들을 포함한다. 인코더(340)에 의해 수행되는 정확한 동작들은 압축 포맷(compression format)에 따라 변할 수 있다. 출력되는 인코딩된 데이터의 포맷은 H.265/HEVC 포맷, WMV(Windows Media Video) 포맷, VC-1 포맷, MPEG-x 포맷(예컨대, MPEG-1, MPEG-2, 또는 MPEG-4), H.26x 포맷(예컨대, H.261, H.262, H.263, H.264), 또는 다른 포맷의 변형 또는 확장일 수 있다.
인코더(340)는 프레임을 동일한 크기 또는 상이한 크기들의 다수의 타일들로 분할할 수 있다. 예를 들어, 인코더(340)는 프레임을, 프레임 경계와 함께, 프레임 내의 타일의 수평 및 수직 경계를 정의하는 타일 행 및 타일 열을 따라 분할하고, 여기서 각각의 타일은 직사각형 영역이다. 타일은 종종 병렬 처리를 위한 옵션들을 제공하기 위해 사용된다. 프레임은 또한 하나 이상의 슬라이스들로서 구성(organize)될 수 있고, 여기서 슬라이스는 프레임 전체 또는 프레임의 영역일 수 있다. 슬라이스는 프레임 내의 다른 슬라이스들과 독립적으로 디코딩될 수 있고, 이는 오류 내성(error resilience)을 개선시킨다. 슬라이스 또는 타일의 내용이 인코딩 및 디코딩을 위해 블록들 또는 다른 샘플 값 세트들로 추가로 파티셔닝된다.
H.265/HEVC 표준에 따른 구문에 대해, 인코더는 프레임(또는 슬라이스 또는 타일)의 내용을 코딩 트리 단위(coding tree unit)로 분할한다. CTU(coding tree unit: 코딩 트리 단위)는 루마 CTB(coding tree block: 코딩 트리 블록)로서 구성되는 루마 샘플 값 및 2 개의 크로마 CTB로서 구성되는 대응하는 크로마 샘플 값을 포함한다. CTU(및 그의 CTB)의 크기는 인코더에 의해 선택되고, 예를 들어, 64x64, 32x32 또는 16x16 샘플 값들일 수 있다. CTU는 하나 이상의 코딩 단위(coding unit)들을 포함한다. CU(coding unit)는 루마 CB(coding block: 코딩 블록) 및 2 개의 대응하는 크로마 CB를 가진다. 예를 들어, 하나의 64x64 루마 CTB 및 2 개의 64x64 크로마 CTB를 갖는 CTU(YUV 4:4:4 포맷)는 4 개의 CU로 분할될 수 있고, 각각의 CU는 하나의 32x32 루마 CB 및 2 개의 32x32 크로마 CB를 포함하고, 각각의 CU는 어쩌면 보다 작은 CU로 추가로 분할된다. 또는, 다른 예로서, 하나의 64x64 루마 CTB 및 2 개의 32x32 크로마 CTB를 갖는 CTU(YUV 4:2:0 포맷)는 4 개의 CU로 분할될 수 있고, 각각의 CU는 하나의 32x32 루마 CB 및 2 개의 16x16 크로마 CB를 포함하고, 각각의 CU는 어쩌면 보다 작은 CU로 추가로 분할된다. CU의 가장 작은 허용가능 크기(예컨대, 8x8, 16x16)가 비트스트림에서 시그널링될 수 있다.
일반적으로, CU는 인터(inter) 또는 인트라(intra)와 같은 예측 모드를 갖는다. CU는 예측 정보(예측 모드 상세, 변위 값, 기타 등등) 및/또는 예측 처리를 시그널링하기 위한 하나 이상의 예측 단위를 포함한다. PU(prediction unit)는 루마 PB(prediction block: 예측 블록) 및 2 개의 크로마 PB를 가진다. 인트라 예측된 CU에 대해, PU는, CU가 가장 작은 크기(예컨대, 8x8)를 갖지 않는 한, CU와 동일한 크기를 갖는다. 그 경우에, CU에 대한 구문 요소에 의해 나타내는 바와 같이, CU는 4 개의 보다 작은 PU(예컨대, 가장 작은 CU 크기가 8x8인 경우 각각이 4x4임)로 분할될 수 있거나, PU가 가장 작은 CU 크기를 가질 수 있다. CU는 또한 잔차 코딩/디코딩(residual coding/decoding)을 위한 하나 이상의 변환 단위(transform unit)를 가지며, 여기서 TU(transform unit: 변환 단위)는 하나의 TB(transform block: 변환 블록) 및 2 개의 크로마 TB를 갖는다. 인트라 예측된 CU에서의 PU는 단일의 TU(크기가 PU와 같음) 또는 다수의 TU를 포함할 수 있다. 인코더는 비디오를 CTU, CU, PU, TU, 기타로 어떻게 분할할지를 결정한다.
H.265/HEVC 구현들에서, 슬라이스는 단일의 슬라이스 세그먼트(독립적인 슬라이스 세그먼트)를 포함하거나 다수의 슬라이스 세그먼트들(독립적인 슬라이스 세그먼트와 하나 이상의 종속적인 슬라이스 세그먼트들)로 나누어질 수 있다. 슬라이스 세그먼트는 단일의 NAL(network abstraction layer: 네트워크 추상화 계층) 단위에 포함되는, 타일 스캔에서 연속적으로 정렬된 정수 개의 CTU들이다. 독립적인 슬라이스 세그먼트에 대해, 슬라이스 세그먼트 헤더(slice segment header)는 독립적인 슬라이스 세그먼트에 대해 적용되는 구문 요소들의 값들을 포함한다. 종속적인 슬라이스 세그먼트에 대해, 절단된 슬라이스 세그먼트 헤더(truncated slice segment header)는 그 종속적인 슬라이스 세그먼트에 대해 적용되는 구문 요소들의 몇 개의 값들을 포함하고, 종속적인 슬라이스 세그먼트에 대한 다른 구문 요소들의 값들은 디코딩 순서에서 선행하는 독립적인 슬라이스 세그먼트에 대한 값들로부터 추론된다.
본원에서 사용되는 바와 같이, "블록"이라는 용어는, 문맥에 따라, 매크로블록, 예측 단위, 잔차 데이터 단위, 또는 CB, PB 또는 TB, 또는 어떤 다른 샘플 값 세트를 나타낼 수 있다.
도 3으로 돌아가서, 인코더는 소스 프레임(331)의 인트라 코딩된 블록을 소스 프레임(331) 내의 다른 이전에 재구성된 샘플 값들로부터의 예측으로 표현한다. 인트라 BC 예측을 위해, 인트라 픽처 추정기(intra-picture estimator)는 다른 이전에 재구성된 샘플 값들에 대한 블록의 변위를 추정한다. 인트라 프레임 예측 참조 영역(intra-frame prediction reference region)은 블록에 대한 BC 예측 값들을 발생시키기 위해 사용되는 프레임 내의 샘플 값들의 영역이다. 인트라 프레임 예측 영역은 BV(block vector) 값(BV 추정에서 결정됨), 또는 대안적으로, 블록 해시 사전(block hash dictionary)(해시 테이블의 예)에서 재구성 블록을 나타내는 해시 값으로 표시될 수 있다. BV 추정 동안의 해시 기반 블록 매칭을 위해, 해시 테이블이 본원에 기술되는 혁신들 중 하나 이상을 사용하여 구성될 수 있고, 인코더는 본원에 기술되는 바와 같은 후보 블록들에 대한 이용가능성 검사를 수행할 수 있다. 블록에 대한 인트라 공간 예측(intra spatial prediction)에 대해, 인트라 픽처 추정기는 이웃하는 재구성된 샘플 값들의 블록 내로의 외삽(extrapolation)을 추정한다. 인트라 픽처 추정기는 엔트로피 코딩되어 있는, (인트라 BC 예측을 위한 BV 값들 또는 해시 값들, 또는 인트라 공간 예측을 위한 예측 모드(방향)와 같은) 예측 정보를 출력할 수 있다. 인트라 프레임 예측 예측기(intra-frame prediction predictor)는 인트라 예측 값들을 결정하기 위해 예측 정보를 적용한다.
인코더(340)는 소스 프레임(331)의 인터 프레임 코딩된, 예측된 블록을 참조 프레임들로부터의 예측으로 표현한다. 움직임 추정기(motion estimator)는 하나 이상의 참조 프레임들(369)에 대한 블록의 움직임을 추정한다. 움직임 추정 동안의 해시 기반 블록 매칭을 위해, 해시 테이블이 본원에 기술되는 혁신들 중 하나 이상을 사용하여 구성될 수 있다. 다수의 참조 프레임들이 사용될 때, 다수의 참조 프레임들은 상이한 시간 방향들 또는 동일한 시간 방향으로부터의 것일 수 있다. 움직임 보상된 예측 참조 영역(motion-compensated prediction reference region)은 현재 프레임의 샘플 값들의 블록에 대한 움직임 보상된 예측 값들을 발생시키는데 사용되는 참조 프레임(들) 내의 샘플 값들의 영역이다. 움직임 추정기는 엔트로피 코딩되어 있는, MV(motion vector: 움직임 벡터) 정보와 같은, 움직임 정보를 출력한다. 움직임 보상기(motion compensator)는 인터 프레임 예측을 위한 움직임 보상된 예측 값들을 결정하기 위해 참조 프레임들(369)에 MV들을 적용한다.
인코더는 블록의 예측 값들(인트라 또는 인터)과 대응하는 원래 값들 사이의 차이(있는 경우)를 결정할 수 있다. 이 예측 잔차 값(prediction residual value)들은 주파수 변환, 양자화 및 엔트로피 인코딩을 사용하여 추가로 인코딩된다. 예를 들어, 인코더(340)는 비디오의 픽처, 타일, 슬라이스 및/또는 다른 부분에 대해 QP(quantization parameter: 양자화 파라미터)에 대한 값들을 설정하고, 그에 따라 변환 계수(coefficient)들을 양자화한다. 인코더(340)의 엔트로피 코더(entropy coder)는 양자화된 변환 계수 값들은 물론, 특정의 보조 정보(side information)(예컨대, MV 정보, BV 예측자에 대한 인덱스 값, BV 차분, 해시 값, QP 값, 모드 결정, 파라미터 선택)를 압축한다. 전형적인 엔트로피 코딩 기법들은 지수 골롬 코딩(Exponential-Golomb coding), 골롬 라이스 코딩(Golomb-Rice coding), 산술 코딩(arithmetic coding), 차분 코딩(differential coding), 허프만 코딩(Huffman coding), 런 길이 코딩(run length coding), V2V(variable-length-to-variable-length) 코딩, V2F(variable-length-to-fixed-length) 코딩, LZ(Lempel-Ziv) 코딩, 사전 코딩(dictionary coding), PIPE(probability interval partitioning entropy coding), 및 이들의 조합들을 포함한다. 엔트로피 코더는 상이한 종류의 정보에 대해 상이한 코딩 기법들을 사용할 수 있고, (예컨대, 골롬 라이스 코딩에 뒤이어서 산술 코딩을 적용하는 것에 의해) 다수의 기법들을 결합하여 적용할 수 있으며, 특정의 코딩 기법 내에서 다수의 코드 테이블들 중에서 선택할 수 있다.
디코딩된 프레임에서의 블록 경계 행 및/또는 열에 걸친 불연속을 평활화하기 위해 적응적 블록화 제거 필터(adaptive deblocking filter)가 인코더(340) 내의 움직임 보상 루프 내에 포함된다. (도시되지 않은, 링잉 제거 필터링(de-ringing filtering), ALF(adaptive loop filtering), 또는 SAO(sample-adaptive offset) 필터링과 같은) 다른 필터링이 대안적으로 또는 그에 부가하여 루프내 필터링 동작들로서 적용될 수 있다.
인코더(340)에 의해 생성되는 인코딩된 데이터는 비트스트림 구문의 다양한 계층들에 대한 구문 요소들을 포함한다. 예를 들어, H.265/HEVC 표준에 따른 구문에 대해, PPS(picture parameter set: 픽처 파라미터 세트)는 픽처와 연관될 수 있는 구문 요소들을 포함하는 구문 구조(syntax structure)이다. PPS가 단일 픽처에 대해 사용될 수 있거나, PPS가 다수의 픽처들에 대해 순차적으로 재사용될 수 있다. PPS는 전형적으로 픽처에 대한 인코딩된 데이터(예컨대, PPS에 대한 하나의 NAL 단위, 및 픽처에 대한 인코딩된 데이터에 대한 하나 이상의 다른 NAL 단위들)와 별개로 시그널링된다. 픽처에 대한 인코딩된 데이터 내에서, 구문 요소는 픽처에 대해 어느 PPS를 사용해야 하는지를 나타낸다. 이와 유사하게, H.265/HEVC 표준에 따른 구문에 대해, SPS(sequence parameter set: 시퀀스 파라미터 세트)는 픽처들의 시퀀스와 연관될 수 있는 구문 요소들을 포함하는 구문 구조이다. 비트스트림은 하나의 SPS 또는 다수의 SPS들을 포함할 수 있다. SPS는 전형적으로 시퀀스에 대한 다른 데이터와 별개로 시그널링되고, 다른 데이터에서의 구문 요소는 어느 SPS를 사용할지를 나타낸다.
코딩된 프레임들(341) 및 MMCO/RPS 정보(342)(또는 프레임들에 대한 의존 관계 및 정렬 구조를 인코더(340)에서 이미 알고 있기 때문에, MMCO/RPS 정보(342)와 동등한 정보)는 디코딩 프로세스 에뮬레이터(350)에 의해 처리된다. 디코딩 프로세스 에뮬레이터(350)는 디코더의 기능 중 일부(예를 들어, 참조 프레임들을 재구성하는 디코딩 작업)를 구현한다. MMCO/RPS 정보(342)와 부합하는 방식으로, 디코딩 프로세스 에뮬레이터(350)는 주어진 코딩된 프레임(341)이 재구성되고 인코딩될 후속 프레임들의 인터 프레임 예측에서 참조 프레임으로서 사용하기 위해 저장될 필요가 있는지의 여부를 결정한다. 코딩된 프레임(341)이 저장될 필요가 있는 경우, 디코딩 프로세스 에뮬레이터(350)는 코딩된 프레임(341)을 수신하고 대응하는 디코딩된 프레임(351)을 생성하는 디코더에 의해 수행될 디코딩 프로세스를 모델링한다. 그렇게 함에 있어서, 인코더(340)가 디코딩된 프레임 저장 구역(360)에 저장된 디코딩된 프레임(들)(369)을 사용할 때, 디코딩 프로세스 에뮬레이터(350)는 또한 디코딩 프로세스의 일부로서 저장 구역(360)으로부터의 디코딩된 프레임(들)(369)을 사용한다.
디코딩된 프레임 임시 메모리 저장 구역(360)은 다수의 프레임 버퍼 저장 구역들(361 , 362, ..., 36n)을 포함한다. MMCO/RPS 정보(342)와 부합하는 방식으로, 디코딩 프로세스 에뮬레이터(350)는 참조 프레임들로서 사용하기 위해 인코더(340)에 의해 더 이상 필요로 하지 않는 프레임들을 갖는 임의의 프레임 버퍼들(361, 362 등)을 식별하기 위해 저장 구역(360)의 내용을 관리한다. 디코딩 프로세스를 모델링한 후에, 디코딩 프로세스 에뮬레이터(350)는 새로 디코딩된 프레임(351)을 이러한 방식으로 식별된 프레임 버퍼(361, 362 등)에 저장한다.
코딩된 프레임들(341) 및 MMCO/RPS 정보(342)는 임시 코딩된 데이터 구역(temporary coded data area)(370)에 버퍼링된다. 코딩된 데이터 구역(370)에 통합되어 있는 코딩된 데이터는, 기본 코딩된 비디오 비트스트림(elementary coded video bitstream)의 구문의 일부로서, 하나 이상의 픽처들에 대한 인코딩된 데이터를 포함한다. 코딩된 데이터 구역(370)에 집계되어 있는 코딩된 데이터는 또한 (예컨대, 하나 이상의 SEI(supplemental enhancement information) 메시지들 또는 VUI(video usability information) 메시지들에서의 하나 이상의 파라미터들로서) 코딩된 비디오 데이터에 관한 미디어 메타데이터를 포함할 수 있다.
임시 코딩된 데이터 구역(370)으로부터의 통합된 데이터(371)는 채널 인코더(channel encoder)(380)에 의해 처리된다. 채널 인코더(380)는 (예컨대, ITU-T H.222.0 | ISO/IEC 13818-1과 같은 미디어 프로그램 스트림 또는 전송 스트림 포맷 또는 IETF RFC 3550과 같은 인터넷 실시간 전송 프로토콜 포맷에 따라) 미디어 스트림으로서 전송 또는 저장하기 위해 통합된 데이터를 패킷화(packetize) 및/또는 다중화(multiplex)할 수 있고, 이 경우에 채널 인코더(380)는 미디어 전송 스트림의 구문의 일부로서 구문 요소들을 추가할 수 있다. 또는, 채널 인코더(380)는 (예컨대, ISO/IEC 14496-12와 같은 미디어 컨테이너 포맷(media container format)에 따라) 파일로서 저장하기 위해 집계된 데이터를 구성(organize)할 수 있고, 이 경우에 채널 인코더(380)는 미디어 저장 파일의 구문의 일부로서 구문 요소들을 추가할 수 있다. 또는, 보다 일반적으로, 채널 인코더(380)는 하나 이상의 미디어 시스템 다중화 프로토콜들 또는 전송 프로토콜들을 구현할 수 있고, 이 경우에 채널 인코더(380)는 프로토콜(들)의 구문의 일부로서 구문 요소들을 추가할 수 있다. 채널 인코더(380)는 출력에 대한 저장소, 통신 연결, 또는 다른 채널을 나타내는 출력을 채널(390)에 제공한다. 채널 인코더(380) 또는 채널(390)은 또한 FEC(forward-error correction: 순방향 오류 정정) 인코딩 및 아날로그 신호 변조와 같은 다른 요소들(도시되지 않음)을 포함할 수 있다.
IV. 예시적인 디코더 시스템
도 4는 일부 기술된 실시예들이 구현될 수 있는 예시적인 디코더 시스템(400)의 블록도이다. 디코더 시스템(400)은 실시간 통신을 위한 저대기시간(low-latency) 디코딩 모드 및 파일 또는 스트림으로부터 미디어 재생을 위한 고대기시간 디코딩 모드와 같은 다수의 디코딩 모드들 중 임의의 디코딩 모드에서 동작할 수 있는 범용 디코딩 도구일 수 있거나, 하나의 이러한 디코딩 모드를 위해 적용된 특수 목적 디코딩 도구일 수 있다. 디코더 시스템(400)은 특정 유형의 콘텐츠(예컨대, 화면 포착 콘텐츠)를 디코딩하도록 적용될 수 있다. 디코더 시스템(400)은 운영 체제 모듈로서, 애플리케이션 라이브러리의 일부로서 또는 독립형 애플리케이션으로서 구현될 수 있다. 일반적으로, 디코더 시스템(400)은 채널(410)로부터 코딩된 데이터를 수신하고 출력 목적지(490)에 대한 출력으로서 재구성된 프레임들을 생성한다. 코딩된 데이터는 해시 기반 블록 매칭을 사용하여 인코딩된 콘텐츠를 포함할 수 있다.
디코더 시스템(400)은 입력으로서의 코딩된 데이터에 대한 저장소, 통신 연결, 또는 다른 채널을 나타낼 수 있는 채널(410)을 포함한다. 채널(410)은 채널 코딩되어 있는 코딩된 데이터를 생성한다. 채널 디코더(420)는 코딩된 데이터를 처리할 수 있다. 예를 들어, 채널 디코더(420)는 (예컨대, ITU-T H.222.0 | ISO/IEC 13818-1과 같은 미디어 프로그램 스트림 또는 전송 스트림 포맷 또는 IETF RFC 3550과 같은 인터넷 실시간 전송 프로토콜 포맷에 따라) 미디어 스트림으로서 전송하거나 저장하기 위해 통합된 데이터를 역패킷화(de-packetize) 및/또는 역다중화(demultiplex)하고, 이 경우에 채널 디코더(420)는 미디어 전송 스트림의 구문의 일부로서 추가된 구문 요소들을 파싱할 수 있다. 또는, 채널 디코더(420)는 (예컨대, ISO/IEC 14496-12와 같은 미디어 컨테이너 포맷에 따라) 파일로서 저장하기 위해 통합되어 있는 코딩된 비디오 데이터를 분리시키고, 이 경우에 채널 디코더(420)는 미디어 저장 파일의 구문의 일부로서 추가된 구문 요소들을 파싱할 수 있다. 또는, 보다 일반적으로, 채널 디코더(420)는 하나 이상의 미디어 시스템 역다중화 프로토콜들 또는 전송 프로토콜들을 구현할 수 있고, 이 경우에 채널 디코더(420)는 프로토콜(들)의 구문의 일부로서 추가된 구문 요소들을 파싱할 수 있다. 채널(410) 또는 채널 디코더(420)는 또한, 예컨대, FEC 디코딩 및 아날로그 신호 복조를 위한 다른 요소들(도시되지 않음)을 포함할 수 있다.
채널 디코더(420)로부터 출력되는 코딩된 데이터(421)는, 충분한 양의 이러한 데이터가 수신될 때까지, 임시 코딩된 데이터 구역(430)에 저장된다. 코딩된 데이터(421)는 코딩된 프레임들(431) 및 MMCO/RPS 정보(432)를 포함한다. 코딩된 데이터 구역(430) 내의 코딩된 데이터(421)는, 기본 코딩된 비디오 비트스트림의 구문의 일부로서, 하나 이상의 픽처들에 대한 코딩된 데이터를 포함한다. 코딩된 데이터 구역(430) 내의 코딩된 데이터(421)는 또한 (예컨대, 하나 이상의 SEI 메시지들 또는 VUI 메시지들에서의 하나 이상의 파라미터들로서) 인코딩된 비디오 데이터에 관련된 미디어 메타데이터를 포함할 수 있다.
일반적으로, 코딩된 데이터 구역(430)은 코딩된 데이터(421)가 디코더(450)에 의해 사용될 때까지 이러한 코딩된 데이터(421)를 일시적으로 저장한다. 그 시점에서, 코딩된 프레임(431) 및 MMCO/RPS 정보(432)에 대한 코딩된 데이터가 코딩된 데이터 구역(430)으로부터 디코더(450)로 전송된다. 디코딩이 계속됨에 따라, 새로운 코딩된 데이터가 코딩된 데이터 구역(430)에 추가되고, 코딩된 데이터 구역(430)에 남아 있는 가장 오래된 코딩된 데이터가 디코더(450)로 전송된다.
디코더(450)는 코딩된 프레임(431)을 디코딩하여 대응하는 디코딩된 프레임(451)을 생성한다. 적절한 경우, 그의 디코딩 프로세스를 수행할 때, 디코더(450)는 하나 이상의 이전에 디코딩된 프레임들(469)을 인터 프레임 예측을 위한 참조 프레임들로서 사용할 수 있다. 디코더(450)는 디코딩된 프레임 임시 메모리 저장 구역(460)으로부터 이러한 이전에 디코딩된 프레임들(469)을 판독한다. 일반적으로, 디코더(450)는 엔트로피 디코딩, 인트라 프레임 예측, 움직임 보상된 인터 프레임 예측, 역양자화(inverse quantization), 역 주파수 변환(inverse frequency transform), 및 타일의 병합과 같은 디코딩 작업들을 수행하는 다수의 디코딩 모듈들을 포함한다. 디코더(450)에 의해 수행되는 정확한 동작들은 압축 포맷에 따라 변할 수 있다.
예를 들어, 디코더(450)는 압축된 프레임 또는 프레임 시퀀스에 대한 인코딩된 데이터를 수신하고, 디코딩된 프레임(451)을 포함하는 출력을 생성한다. 디코더(450)에서, 버퍼는 압축된 프레임에 대한 인코딩된 데이터를 수신하고, 적절한 때에, 수신된 인코딩된 데이터를 엔트로피 디코더에 이용 가능하게 만든다. 엔트로피 디코더는, 전형적으로 인코더에서 수행된 엔트로피 인코딩의 역을 적용하여, 엔트로피 코딩된 양자화된 데이터는 물론 엔트로피 코딩된 보조 정보를 엔트로피 디코딩한다. 움직임 보상기는 재구성되는 프레임의 인터 코딩된 블록의 움직임 보상된 예측 값을 형성하기 위해 움직임 정보를 하나 이상의 참조 프레임들에 적용한다. 인트라 프레임 예측 모듈은 이웃하는 이전에 재구성된 샘플 값들으로부터 현재 블록의 샘플 값들을 공간적으로 예측할 수 있거나, 인트라 BC 예측에 대해서는, 프레임에서의 인트라 프레임 예측 참조 영역의 이전에 재구성된 샘플 값들을 사용해 현재 블록의 샘플 값들을 예측할 수 있다. 참조 영역은 BV 값 또는, 대안적으로, 블록 해시 사전에서의 재구성 블록을 표시하는 해시 값으로 표시될 수 있다. 디코더(450)는 또한 예측 잔차 값들을 재구성한다. 역양자화기는 엔트로피 디코딩된 데이터를 역양자화한다. 예를 들어, 디코더(450)는 비디오의 픽처, 타일, 슬라이스 및/또는 다른 부분에 대해 QP에 대한 값들을 비트스트림에서의 구문 요소들에 기반하여 설정하고, 그에 따라 변환 계수들을 역양자화한다. 역 주파수 변환기는 양자화된 주파수 영역 데이터를 공간 영역 데이터로 변환시킨다. 인터 프레임 예측된 블록에 대해, 디코더(450)는 재구성된 예측 잔차 값들을 움직임 보상된 예측 값들과 결합시킨다. 디코더(450)는 이와 유사하게 예측 잔차 값들을 인트라 프레임 예측으로부터의 예측 값들과 결합시킬 수 있다. 디코딩된 프레임(451)에서의 블록 경계 행 및/또는 열에 걸친 불연속을 평활화하기 위해 적응적 블록화 제거 필터가 비디오 디코더(450)에서의 움직임 보상 루프 내에 포함된다. (도시되지 않은, 링잉 제거 필터링, ALF, 또는 SAO 필터링과 같은) 다른 필터링이 대안적으로 또는 그에 부가하여 루프내 필터링 동작들로서 적용될 수 있다.
디코딩된 프레임 임시 메모리 저장 구역(460)은 다수의 프레임 버퍼 저장 구역들(461 , 462, ..., 46n)을 포함한다. 디코딩된 프레임 저장 구역(460)은 디코딩된 픽처 버퍼(decoded picture buffer)의 일 예이다. 디코더(450)는 디코딩된 프레임(451)을 저장할 수 있는 프레임 버퍼(461, 462 등)를 식별하기 위해 MMCO/RPS 정보(432)를 사용한다. 디코더(450)는 디코딩된 프레임(451)을 그 프레임 버퍼에 저장한다.
출력 시퀀서(output sequencer)(480)는 출력 순서에서 생성될 다음 프레임이 디코딩된 프레임 저장 구역(460)에서 이용가능할 때를 식별한다. 출력 순서에서 생성될 다음 프레임(481)이 디코딩된 프레임 저장 구역(460)에서 이용가능할 때, 그것이 출력 시퀀서(480)에 의해 판독되고 출력 목적지(490)(예컨대, 디스플레이)로 출력된다. 일반적으로, 프레임들이 디코딩된 프레임 저장 구역(460)으로부터 출력 시퀀서(480)에 의해 출력되는 순서는 프레임들이 디코더(450)에 의해 디코딩되는 순서와 상이할 수 있다.
V. 예시적인 비디오 인코더
도 5a 및 도 5b는 일부 기술된 실시예들이 구현될 수 있는 일반화된 비디오 인코더(500)의 블록도이다. 인코더(500)는 현재 프레임(505)을 포함하는 비디오 픽처 시퀀스를 입력 비디오 신호(505)로서 수신하고, 코딩된 비디오 비트스트림(595)에서의 인코딩된 데이터를 출력으로서 생성한다.
인코더(500)는 블록 기반(block-based)이고, 구현에 의존하는 블록 포맷을 사용한다. 블록이 상이한 스테이지들에서(예컨대, 예측, 주파수 변환 및/또는 엔트로피 인코딩 스테이지들에서) 추가로 세분될 수 있다. 예를 들어, 픽처가 64x64 블록들, 32x32 블록들 또는 16x16 블록들로 나누어질 수 있고, 이들이 차례로 코딩 및 디코딩을 위해 보다 작은 샘플 값 블록들로 나누어질 수 있다. H.265/HEVC 표준에 대한 인코딩의 구현에서, 인코더는 픽처를 CTU들(CTB들), CU들(CB들), PU들(PB들) 및 TU들(TB들)로 파티셔닝한다.
인코더(500)는 인트라 픽처 코딩(intra-picture coding) 및/또는 인터 픽처 코딩(inter-picture coding)을 사용하여 픽처들을 압축한다. 인코더(500)의 컴포넌트들 중 다수는 인트라 픽처 코딩 및 인터 픽처 코딩 둘 다를 위해 사용된다. 그 컴포넌트들에 의해 수행되는 정확한 동작들은 압축 중인 정보의 유형에 따라 달라질 수 있다.
타일화 모듈(tiling module)(510)은, 선택적으로, 픽처를 동일한 크기 또는 상이한 크기들의 다수의 타일들로 파티셔닝한다. 예를 들어, 타일화 모듈(510)은 픽처를, 픽처 경계와 함께, 픽처 내의 타일들의 수평 및 수직 경계를 정의하는 타일 행 및 타일 열을 따라 분할하고, 여기서 각각의 타일은 직사각형 영역이다. H.265/HEVC 구현들에서, 인코더(500)는 픽처를 하나 이상의 슬라이스들로 파티셔닝하고, 여기서 각각의 슬라이스는 하나 이상의 슬라이스 세그먼트들을 포함한다.
일반 인코딩 제어(520)는 입력 비디오 신호(505)에 대한 픽처들은 물론, 인코더(500)의 다양한 모듈들로부터의 피드백(도시되지 않음)을 수신한다. 전체적으로, 일반 인코딩 제어(520)는, 인코딩 동안 코딩 파라미터를 설정하고 변경하기 위해, 제어 신호들(도시되지 않음)을 다른 모듈들(타일화 모듈(510), 변환기/스케일러/양자화기(530), 스케일러/역변환기(535), 인트라 픽처 추정기(540), 움직임 추정기(550) 및 인트라/인터 스위치(intra/inter switch) 등)에 제공한다. 상세하게는, 일반 인코딩 제어(520)는 인코딩 동안 해시 기반 블록 매칭을 사용할지 및 어떻게 사용할지의 여부를 결정할 수 있다. 일반 인코딩 제어(520)는 또한 인코딩 동안 중간 결과들을 평가할 수 있다(예컨대, 레이트 왜곡 분석(rate-distortion analysis)을 수행함). 일반 인코딩 제어(520)는, 대응하는 디코더가 일관성 있는 결정을 할 수 있도록, 인코딩 동안 행해진 결정을 나타내는 일반 제어 데이터(522)를 생성한다. 일반 제어 데이터(522)는 헤더 포맷터/엔트로피 코더(header formatter/entropy coder)(590)에 제공된다.
현재 픽처가 인터 픽처 예측을 사용하여 예측되는 경우, 움직임 추정기(550)는 하나 이상의 참조 픽처들에 대한 입력 비디오 신호(505)의 현재 픽처의 샘플 값 블록들의 움직임을 추정한다. 디코딩된 픽처 버퍼(570)는 참조 픽처들로서 사용하기 위해 하나 이상의 재구성된 이전에 코딩된 픽처(reconstructed previously coded picture)들을 버퍼링한다. 움직임 추정 동안의 해시 기반 블록 매칭을 위해, 인트라 픽처 추정기(540)는 현재 블록에 대한 MV 값을 찾기 위해 블록 해시 사전(도시되지 않음)을 사용할 수 있다. 블록 해시 사전은 해시 테이블의 일 예이다. 움직임 추정 동안의 해시 기반 블록 매칭을 위해, 블록 해시 사전(해시 테이블)이 본원에 기술되는 혁신들 중 하나 이상을 사용하여 구성될 수 있다. 다수의 참조 픽처가 사용될 때, 다수의 참조 픽처는 상이한 시간 방향 또는 동일한 시간 방향으로부터의 것일 수 있다. 움직임 추정기(550)는 MV 데이터와 같은 움직임 데이터(552), 병합 모드 인덱스 값(merge mode index value) 및 참조 픽처 선택 데이터를 보조 정보로서 생성한다. 움직임 데이터(552)는 헤더 포맷터/엔트로피 코더(590)에는 물론 움직임 보상기(555)에도 제공된다.
움직임 보상기(555)는 디코딩된 픽처 버퍼(570)로부터의 재구성된 참조 픽처(들)에 MV를 적용한다. 움직임 보상기(555)는 현재 픽처에 대한 움직임 보상된 예측을 생성한다.
인코더(500) 내의 별도의 경로에서, 인트라 픽처 추정기(540)는 입력 비디오 신호(505)의 현재 픽처의 샘플 값 블록들에 대한 인트라 픽처 예측을 어떻게 수행할지를 결정한다. 현재 픽처는 전체 또는 일부가 인트라 픽처 코딩을 사용하여 코딩될 수 있다. 현재 픽처의 재구성(538)의 값들을 사용하여, 인트라 공간 예측에 대해, 인트라 픽처 추정기(540)는 현재 픽처의 이웃하는 이전에 재구성된 샘플 값들로부터 현재 픽처의 현재 블록의 샘플 값들을 어떻게 공간적으로 예측할지를 결정한다. 또는, BV 값들을 사용하는 인트라 BC 예측에 있어서, 인트라 픽처 추정기(540)는 현재 픽처 내의 상이한 후보 참조 영역들에 대한 현재 블록의 샘플 값들의 변위를 추정한다. 도 5b에서, 후보 참조 영역들은 재구성된 샘플 값들을 포함한다. BV 추정 동안의 해시 기반 블록 매칭을 위해, 인트라 픽처 추정기(540)는 현재 블록에 대한 BV 값을 찾기 위해 블록 해시 사전(541)을 사용할 수 있다. 블록 해시 사전(541)은, 이하에서 기술되는 바와 같이(섹션 VII. C를 참조), 해시 기반 블록 매칭을 위한 후보 블록들을 구성하는 데이터 구조이다. 블록 해시 사전(541)은 해시 테이블의 일 예이다. BV 추정 동안의 해시 기반 블록 매칭을 위해, 블록 해시 사전(541)(해시 테이블)이 본원에 기술되는 혁신들 중 하나 이상을 사용하여 구성될 수 있고, 인코더는 본원에 기술되는 바와 같은 후보 블록들에 대한 이용가능성 검사를 수행할 수 있다. 블록 해시 사전(541)은 새로운 후보 블록들에 관한 정보를 저장하기 위해 인코딩 동안 업데이트될 수 있는데, 그 이유는 그 후보 블록들이 해시 기반 블록 매칭에서 사용하기 위해 이용가능하게 되기 때문이다. (다른 구현들(도 6a 및 도 6B를 참조)에서, 블록 해시 사전이 원래의 샘플 값들에 기반하여 구성될 수 있다.) 대안적으로, BV 값들을 사용하는 대신에, 인트라 BC 예측이 블록들을 표현하는 해시 값들을 사용할 수 있다. 이 경우에, 해시 기반 블록 매칭을 위해, 인트라 픽처 추정기(540)는 현재 블록을 표현하는데 사용할 해시 값을 찾기 위해 블록 해시 사전(541)을 사용할 수 있다.
인트라 픽처 추정기(540)는, 인트라 예측이 공간 예측 또는 인트라 BC 예측을 사용할지의 여부를 나타내는 정보(예컨대, 인트라 블록마다의 플래그 값), (인트라 공간 예측에 대한) 예측 모드 방향, 및 (인트라 BC 예측에 대한) BV 값들 또는 해시 값들과 같은, 인트라 예측 데이터(542)를 보조 정보로서 생성한다. 인트라 예측 데이터(542)는 헤더 포맷터/엔트로피 코더(590)는 물론 인트라 픽처 예측기(545)에 제공된다.
인트라 예측 데이터(542)에 따라, 인트라 픽처 예측기(545)는 현재 픽처의 이웃하는 이전에 재구성된 샘플 값들로부터 현재 픽처의 현재 블록의 샘플 값들을 공간적으로 예측한다. 또는, 인트라 BC 예측에 대해, 인트라 픽처 예측기(545)는 현재 블록에 대한 BV 값에 의해 표시되는(또는 블록 해시 사전에서의 해시 값에 의해 표시되는), 인트라 픽처 예측 참조 영역의 이전에 재구성된 샘플 값들을 사용하여 현재 블록의 샘플 값들을 예측한다. 어떤 경우에, BV 값은 BV 예측자(예측된 BV 값)일 수 있다. 다른 경우에, BV 값은 그의 예측된 BV 값과 상이할 수 있고, 이 경우에 BV 차분은 예측된 BV 값과 BV 값 사이의 차이를 나타낸다. 픽처에 대한 크로마 데이터가 루마 데이터와 동일한 분해능을 가질 때(예컨대, 포맷이 YUV 4:4:4 포맷 또는 RGB 4:4:4 포맷일 때), 크로마 블록에 대해 적용되는 BV 값은 루마 블록에 대해 적용되는 BV 값과 동일할 수 있다. 다른 한편으로, 픽처에 대한 크로마 데이터가 루마 데이터에 비해 감소된 분해능을 가질 때(예컨대, 포맷이 YUV 4:2:0 포맷일 때), (예컨대, BV 값의 수직 성분 및 수평 성분을 2로 나누고 이를 정수 값으로 버림(truncate)하거나 반올림(round)하는 것에 의해) 크로마 분해능에서의 차이에 대해 조절하기 위해 크로마 블록에 대해 적용되는 BV 값이 스케일링 다운(scale down)되고 어쩌면 반올림될 수 있다. 해시 값이 픽처의 루마 샘플 값들에 대한 (블록 해시 사전으로부터의) 재구성 블록을 표현할 때, 픽처에서의 대응하는 위치들에서의 크로마 샘플 값들에 대한 재구성 블록들이 사용될 수 있다.
인트라/인터 스위치는 주어진 블록에 대한 예측(558)이 움직임 보상된 예측 또는 인트라 픽처 예측일 것인지의 여부를 선택한다. 비생략 모드 블록(non-skip-mode block)에 대해, 예측(558)의 블록과 입력 비디오 신호(505)의 원래의 현재 픽처의 대응하는 부분 사이의 차이(있는 경우)는 잔차(518)의 값들을 제공한다. 현재 픽처의 재구성 동안, 비생략 모드 블록에 대해, 재구성된 잔차 값들은, 비디오 신호(505)로부터의 원래 콘텐츠의 대략적인 또는 정확한 재구성(538)을 생성하기 위해, 예측(558)과 결합된다. (손실 압축에서는, 일부 정보가 비디오 신호(505)로부터 손실된다.)
변환기/스케일러/양자화기(530)에서, 주파수 변환기는 공간 영역 비디오 데이터를 주파수 영역(즉, 스펙트럼, 변환) 데이터로 변환한다. 블록 기반 비디오 코딩에 있어서, 주파수 변환기는 예측 잔차 데이터(또는 예측(558)이 널(null)인 경우, 샘플 값 데이터)의 블록들에 이산 코사인 변환(DCT), 그의 정수 근사화(integer approximation), 또는 다른 유형의 순방향 블록 변환(forward block transform)(예컨대, 이산 사인 변환(discrete sine transform) 또는 그의 정수 근사화)을 적용하여, 주파수 변환 계수 블록들을 생성한다. 인코더(500)는 또한 이러한 변환 단계가 생략된다는 것을 나타낼 수 있다. 스케일러/양자화기는 변환 계수들을 스케일링하고 양자화한다. 예를 들어, 양자화기는 픽처마다 기반하여, 타일마다 기반하여, 슬라이스마다 기반하여, 블록마다 기반하여, 주파수 특정(frequency-specific) 기반으로 또는 다른 기반으로 변하는 양자화 계단 크기(quantization step size)를 사용해 데드존 스칼라 양자화(dead-zone scalar quantization)를 주파수 영역 데이터에 적용한다. 양자화된 변환 계수 데이터(532)는 헤더 포맷터/엔트로피 코더(590)에 제공된다.
스케일러/역변환기(535)에서, 스케일러/역양자화기는 양자화된 변환 계수에 대해 역스케일링 및 역양자화를 수행한다. 역 주파수 변환기는 역 주파수 변환을 수행하여, 재구성된 예측 잔차 값 블록들 또는 재구성된 샘플 값 블록들을 생성한다. 비생략 모드 블록에 대해, 인코더(500)는 재구성된 잔차 값들을 예측(558)의 값들(예컨대, 움직임 보상된 예측 값들, 인트라 픽처 예측 값들)과 결합하여 재구성(538)을 형성한다. 생략 모드 블록(skip-mode block)에 대해, 인코더(500)는 예측(558)의 값들을 재구성(538)으로서 사용한다.
인트라 픽처 예측의 경우, 재구성(538)의 값들이 인트라 픽처 추정기(540) 및 인트라 픽처 예측기(545)에 피드백될 수 있다. 재구성(538)의 값들은 또한 블록 해시 사전(541)을 업데이트하는데 사용될 수 있다. 또한, 재구성(538)의 값들이 후속 픽처의 움직임 보상된 예측을 위해 사용될 수 있다. 재구성(538)의 값들이 추가로 필터링될 수 있다. 필터링 제어(560)는, 비디오 신호(505)의 주어진 픽처에 대해, 재구성(538)의 값들에 대해 블록화 제거 필터링 및 SAO 필터링을 어떻게 수행할지를 결정한다. 필터링 제어(560)는 헤더 포맷터/엔트로피 코더(590) 및 병합기/필터(들)(565)에 제공되는 필터 제어 데이터(562)를 생성한다.
병합기/필터(들)(565)에서, 인코더(500)는 상이한 타일로부터의 콘텐츠를 픽처의 재구성된 버전에 병합한다. 인코더(500)는, 픽처들에서의 경계에 걸쳐 불연속을 적응적으로 평활화하기 위해, 필터 제어 데이터(562)에 따라 블록화 제거 필터링 및 SAO 필터링을 선택적으로 수행한다. (도시되지 않은, 링잉 제거 필터링 또는 ALF와 같은) 다른 필터링이 대안적으로 또는 그에 부가하여 적용될 수 있다. 인코더(500)의 설정에 따라, 타일 경계들이 선택적으로 필터링되거나 전혀 필터링되지 않을 수 있고, 인코더(500)는 이러한 필터링이 적용되었는지의 여부를 나타내는 구문을 코딩된 비트스트림 내에 제공할 수 있다. 디코딩된 픽처 버퍼(570)는 후속하는 움직임 보상된 예측에서 사용하기 위해 재구성된 현재 픽처를 버퍼링한다.
헤더 포맷터/엔트로피 코더(590)는 일반 제어 데이터(522), 양자화된 변환 계수 데이터(532), 인트라 예측 데이터(542), 움직임 데이터(552) 및 필터 제어 데이터(562)를 포맷 지정하고 그리고/또는 엔트로피 코딩한다. 인트라 예측 데이터(542)에 대해, 헤더 포맷터/엔트로피 코더(590)는 (인트라 BC 예측을 위해) BV 예측자 인덱스 값들을 선택하고 엔트로피 코딩할 수 있거나, 기본 BV 예측자가 사용될 수 있다. 어떤 경우에, 헤더 포맷터/엔트로피 코더(590)는 또한 (BV 값들의 BV 예측자에 대한) BV 값들의 BV 차분을 결정하고, 이어서, 예컨대, 컨텍스트 적응적 이진 산술 코딩(context-adaptive binary arithmetic coding)을 사용하여, BV 차분들을 엔트로피 코딩한다.
헤더 포맷터/엔트로피 코더(590)는 인코딩된 데이터를 코딩된 비디오 비트스트림(595)에서 제공한다. 코딩된 비디오 비트스트림(595)의 포맷은 H.265/HEVC 포맷, WMV(Windows Media Video) 포맷, VC-1 포맷, MPEG-x 포맷(예컨대, MPEG-1, MPEG-2, 또는 MPEG-4), H.26x 포맷(예컨대, H.261, H.262, H.263, H.264), 또는 다른 포맷의 변형 또는 확장일 수 있다.
일부 예시적인 구현에서, 해시 기반 블록 매칭에서 고려되는 후보 블록들은 재구성된 샘플 값들을 포함한다. 즉, 후보 블록들은 픽처에서 이전에 인코딩되고 이어서 재구성된 콘텐츠의 일부이다. 후보 블록들에 대한 해시 값들은 재구성된 샘플 값들로부터 결정된다. 해시 기반 블록 매칭 동안, 인코더는 입력 샘플 값들을 사용하여 현재 블록에 대한 해시 값을 결정한다. 인코더는 이를 후보 블록들에 대한 재구성된 샘플 값들로부터 결정된 해시 값들과 비교한다(또는 해시 값을 다른 방식으로 사용한다).
대안적으로, 해시 기반 블록 매칭에서 고려되는 후보 블록들은 입력 샘플 값들을 포함한다. 즉, 후보 블록들은 픽처의 입력 버전의 일부이다. 후보 블록들에 대한 해시 값들은 입력 샘플 값들로부터 결정된다. 해시 기반 블록 매칭 동안, 인코더는 입력 샘플 값들을 사용하여 현재 블록에 대한 해시 값을 결정한다. 인코더는 이를 후보 블록들에 대한 입력 샘플 값들로부터 결정된 해시 값들과 비교한다(또는 해시 값을 다른 방식으로 사용한다). 그렇다고 하더라도, 재구성된 샘플 값들로부터의 매칭 블록이 현재 블록을 표현하는데 사용된다. 이와 같이, BC 예측 동작들은 재구성된 샘플 값들을 여전히 사용한다.
도 6a 및 도 6b는 입력 샘플 값들로부터 해시 값들을 결정하는 일반화된 비디오 인코더(600)를 나타낸 것이다. 대부분의 점에서, 인코더(600)의 모듈들은 도 5a 및 도 5b에 도시된 인코더(500)의 모듈들과 동일하고, 이러한 모듈들에 대해 도 6a 및 도 6b에서 동일한 참조 번호들이 사용된다. 그렇지만, 도 6b에서 블록 해시 사전(641)이 상이하다. 도 5b에서, 블록 해시 사전(541)은 해시 함수들을 재구성된 샘플 값들에 적용하여 결정되는 해시 값들을 저장하고, 블록 해시 사전(541)은 재구성된 샘플 값들을 사용하여 업데이트된다. 도 6b에서는, 이와 달리, 블록 해시 사전(641)은 입력 비디오 신호(505)로부터의 입력 샘플 값들에 해시 함수들을 적용하여 결정되는 해시 값들을 저장한다. 예를 들어, 인트라 픽처 추정기(540)에 의한 BV 추정을 위해, 블록 해시 사전(641)은 현재 픽처에서의 후보 블록들에 대한 해시 값들을 저장한다. 움직임 추정기(550)에 의한 움직임 추정을 위해, 블록 해시 사전(도시되지 않음)은 하나 이상의 참조 픽처들의 후보 블록들에 대한 해시 값들을 저장할 수 있다.
입력 샘플 값들로부터 결정되는 해시 값들을 사용하는 것은 일부 블록들이 손실 코딩될 때 인트라 BC 예측 성능을 향상시킬 수 있다. 이 경우에, 양자화 잡음으로 인해, 해시 값들이 재구성된 샘플 값들로부터 결정되는 경우, 인코더는, 현재 블록과 정확하게 매칭되는, 매칭 블록을 찾을 수 없을지도 모른다. 입력 샘플 값들로부터 해시 값들을 결정하는 것에 의해, 해시 기반 블록 매칭이 손실 코딩에 의해 유입되는 왜곡에 의해 영향을 받지 않는다. 인코더는 현재 블록에 대해 어느 매칭 블록을 사용할지를 (예컨대, BV 값을 사용하여) 디코더에 계속 시그널링한다. 이 정보 및 재구성된 샘플 값들을 사용하여, 디코더는 블록 복사 동작을 사용하여 현재 블록을 재구성한다.
구현 및 원하는 압축 유형에 따라, 인코더(500, 600)의 모듈들이 추가되고, 생략되며, 다수의 모듈들로 분할되고, 다른 모듈들과 결합되며, 그리고/또는 유사한 모듈들로 대체될 수 있다. 대안의 실시예에서, 상이한 모듈들 및/또는 다른 구성의 모듈들을 갖는 인코더들이 기술되는 기법들 중 하나 이상을 수행한다. 인코더들의 구체적인 실시예들은 전형적으로 인코더(500, 600)의 변형 또는 보완된 버전을 사용한다. 인코더(500, 600) 내의 모듈들 사이에 도시된 관계는 인코더에서의 정보의 일반적인 흐름을 나타내고; 간단함을 위해, 다른 관계들은 도시되어 있지 않다.
VI. 예시적인 비디오 디코더
도 7은 일부 기술된 실시예들이 구현될 수 있는 일반화된 디코더(700)의 블록도이다. 디코더(700)는 인코딩된 데이터를 코딩된 비디오 비트스트림(705)으로 수신하고, 재구성된 비디오(795)에 대한 픽처들을 포함하는 출력을 생성한다. 코딩된 비디오 비트스트림(705)의 포맷은 H.265/HEVC 포맷, WMV(Windows Media Video) 포맷, VC-1 포맷, MPEG-x 포맷(예컨대, MPEG-1, MPEG-2, 또는 MPEG-4), H.26x 포맷(예컨대, H.261, H.262, H.263, H.264), 또는 다른 포맷의 변형 또는 확장일 수 있다.
디코더(700)는 블록 기반이고, 구현에 의존하는 블록 포맷을 사용한다. 블록들이 상이한 스테이지들에서 추가로 세분될 수 있다. 예를 들어, 픽처가 64x64 블록들, 32x32 블록들 또는 16x16 블록들로 나누어질 수 있고, 이들이 차례로 보다 작은 샘플 값 블록들으로 나누어질 수 있다. H.265/HEVC 표준에 대한 디코딩의 구현에서, 픽처가 CTU들(CTB들), CU들(CB들), PU들(PB들) 및 TU들(TB들)로 파티셔닝된다.
디코더(700)는 인트라 픽처 디코딩(intra-picture decoding) 및/또는 인터 픽처 디코딩(inter-picture decoding)을 사용하여 픽처들을 압축 해제한다. 디코더(700)의 컴포넌트들 중 다수는 인트라 픽처 디코딩 및 인터 픽처 디코딩 둘 다를 위해 사용된다. 그 컴포넌트들에 의해 수행되는 정확한 동작들은 압축 해제 중인 정보의 유형에 따라 달라질 수 있다.
버퍼는 인코딩된 데이터를 코딩된 비디오 비트스트림(705)으로 수신하고 수신된 인코딩된 데이터를 파서/엔트로피 디코더(710)에 이용가능하게 만든다. 파서/엔트로피 디코더(710)는, 전형적으로 인코더(500, 600)에서 수행된 엔트로피 코딩의 역(예컨대, 컨텍스트 적응적 이진 산술 디코딩)을 적용하여, 엔트로피 코딩된 데이터를 엔트로피 디코딩한다. 파싱 및 엔트로피 디코딩의 결과로서, 파서/엔트로피 디코더(710)는 일반 제어 데이터(722), 양자화된 변환 계수 데이터(732), 인트라 예측 데이터(742), 움직임 데이터(752) 및 필터 제어 데이터(762)를 생성한다. 인트라 예측 데이터(742)에 대해, 파서/엔트로피 디코더(710)는 (인트라 BC 예측을 위해) BV 예측자 인덱스 값들을 엔트로피 디코딩하거나, 기본 BV 예측자가 사용될 수 있다. 어떤 경우에, 파서/엔트로피 디코더(710)는 또한 (예컨대, 컨텍스트 적응적 이진 산술 디코딩을 사용하여) BV 값들의 BV 차분들을 엔트로피 디코딩하고, 이어서 BV 값들을 재구성하기 위해 BV 차분들을 대응하는 BV 예측자들과 결합시킨다.
일반 디코딩 제어(720)는, 디코딩 동안 디코딩 파라미터들을 설정하고 변경하기 위해, 일반 제어 데이터(722)를 수신하고 제어 신호들(도시되지 않음)을 다른 모듈들(스케일러/역변환기(735), 인트라 픽처 예측기(745), 움직임 보상기(755) 및 인트라/인터 스위치 등)에 제공한다.
현재 픽처가 인터 픽처 예측을 사용하여 예측되는 경우, 움직임 보상기(755)는, MV 데이터, 참조 픽처 선택 데이터 및 병합 모드 인덱스 값들과 같은, 움직임 데이터(752)를 수신한다. 움직임 보상기(755)는 디코딩된 픽처 버퍼(770)로부터의 재구성된 참조 픽처(들)에 MV를 적용한다. 움직임 보상기(755)는 현재 픽처의 인터 코딩된 블록들에 대한 움직임 보상된 예측을 생성한다. 디코딩된 픽처 버퍼(770)는 참조 픽처들로서 사용하기 위해 하나 이상의 이전에 재구성된 픽처들을 저장한다.
디코더(700) 내의 별도의 경로에서, 인트라 픽처 예측 예측기(745)는, 인트라 예측이 공간 예측 또는 인트라 BC 예측을 사용할지의 여부를 나타내는 정보(예컨대, 인트라 블록마다의 플래그 값), (인트라 공간 예측에 대한) 예측 모드 방향, 및 (인트라 BC 예측에 대한) BV 값들과 같은, 인트라 예측 데이터(742)를 수신한다. 인트라 공간 예측의 경우, 현재 픽처의 재구성(738)의 값들을 사용하여, 예측 모드 데이터에 따라, 인트라 픽처 예측기(745)는 현재 픽처의 이웃하는 이전에 재구성된 샘플 값들로부터 현재 픽처의 현재 블록의 샘플 값들을 공간적으로 예측한다. 또는, BV 값들을 사용하는 인트라 BC 예측에 있어서, 인트라 픽처 예측기(745)는 현재 블록에 대한 BV 값에 의해 표시되는, 인트라 픽처 예측 참조 영역의 이전에 재구성된 샘플 값들을 사용하여 현재 블록의 샘플 값들을 예측한다.
인트라/인터 스위치는 주어진 블록에 대한 예측(758)이 움직임 보상된 예측 또는 인트라 픽처 예측인지의 여부를 선택한다. 예를 들어, H.265/HEVC 구문을 따를 때, 인트라/인터 스위치는 인트라 예측된 CU들 및 인터 예측된 CU들을 포함할 수 있는 픽처의 CU에 대해 인코딩된 구문 요소에 기반하여 제어될 수 있다. 비생략 모드 블록에 대해, 디코더(700)는 비디오 신호로부터의 콘텐츠의 재구성(738)을 생성하기 위해 예측(758)을 재구성된 잔차 값들과 결합시킨다. 생략 모드 블록에 대해, 디코더(700)는 예측(758)의 값들을 재구성(738)으로서 사용한다.
비생략 모드 블록에 대한 잔차를 재구성하기 위해, 스케일러/역변환기(735)는 양자화된 변환 계수 데이터(732)를 수신하고 처리한다. 스케일러/역변환기(735)에서, 스케일러/역양자화기는 양자화된 변환 계수들에 대해 역스케일링 및 역양자화를 수행한다. 역 주파수 변환기는 역 주파수 변환을 수행하여, 재구성된 예측 잔차 값 블록들 또는 재구성된 샘플 값 블록들을 생성한다. 예를 들어, 역 주파수 변환기는 주파수 변환 계수들에 역 블록 변환을 적용하여, 샘플 값 데이터 또는 예측 잔차 데이터를 생성한다. 역 주파수 변환은 역 DCT, 그의 정수 근사화, 또는 다른 유형의 역 주파수 변환(예컨대, 역 이산 사인 변환 또는 그의 정수 근사화)일 수 있다.
인트라 픽처 예측의 경우, 재구성(738)의 값들이 인트라 픽처 예측기(745)에 피드백될 수 있다. 인터 픽처 예측의 경우, 재구성(738)의 값들이 추가로 필터링될 수 있다. 병합기/필터(들)(765)에서, 디코더(700)는 상이한 타일들로부터의 콘텐츠를 픽처의 재구성된 버전으로 병합한다. 디코더(700)는, 픽처들에서의 경계에 걸쳐 불연속을 적응적으로 평활화하기 위해, 필터 제어 데이터(762) 및 필터 적응에 대한 규칙들에 따라 블록화 제거 필터링 및 SAO 필터링을 선택적으로 수행한다. (도시되지 않은, 링잉 제거 필터링 또는 ALF와 같은) 다른 필터링이 대안적으로 또는 그에 부가하여 적용될 수 있다. 디코더(700)의 설정 또는 인코딩된 비트스트림 내의 구문 표시에 따라, 타일 경계들이 선택적으로 필터링되거나 전혀 필터링되지 않을 수 있다. 디코딩된 픽처 버퍼(770)는 후속하는 움직임 보상된 예측에서 사용하기 위해 재구성된 현재 픽처를 버퍼링한다.
디코더(700)는 또한 후처리 필터(post-processing filter)를 포함할 수 있다. 후처리 필터(708)는 링잉 제거 필터링, 적응 Wiener 필터링, 필름 그레인 재현 필터링(film-grain reproduction filtering), SAO 필터링 또는 다른 종류의 필터링을 포함할 수 있다.
일부 예시적인 구현에서, BV 값들이 인트라 BC 예측을 위해 디코더(700)에 시그널링되고, 디코더(700)는 해시 테이블을 포함할 필요가 없다. 대안적으로, 해시 값들을 사용하는 인트라 BC 예측에 있어서, 인트라 픽처 예측기(745)는 현재 블록에 대한 시그널링된 해시 값을 사용하여 현재 블록에 대한 재구성 블록을 결정한다.
도 8은 인트라 BC 예측을 위해 해시 테이블을 사용하는 일반화된 비디오 디코더(800)를 나타낸 것이다. 대부분의 점에서, 디코더(800)의 모듈들은 도 7에 도시된 디코더(700)의 모듈들과 동일하고, 이러한 모듈들에 대해 도 8에서 동일한 참조 번호들이 사용된다. 그렇지만, 도 8에서는 블록 해시 사전(841)이 추가되어 있다. 블록 해시 사전(841)은 해시 값에 따라 후보 블록 값들을 구성하는 데이터 구조이다. 도 8에서, 블록 해시 사전(841)은 해시 함수들을 재구성된 샘플 값들에 적용하여 결정되는 해시 값들을 저장한다. (이것은, 입력 샘플 값들이 아니라 재구성된 샘플 값들로부터 해시 값들을 계산하는, 도 5a 및 도 5b에 도시된 것과 같은 인코더(500)의 사용을 가정한다.) 인트라 픽처 예측 예측기(745)는, 인트라 BC 예측을 위한 해시 값들을 포함하는, 인트라 예측 데이터(742)를 수신한다. 인트라 픽처 예측기(745)는 시그널링된 해시 값에 대한 재구성 블록을 찾기 위해 블록 해시 사전(841)을 사용한다. 재구성(738)의 값들은 인트라 픽처 예측기(745)에 피드백되고 블록 해시 사전(841)을 업데이트하는데 사용될 수 있다.
구현 및 원하는 압축 해제 유형에 따라, 디코더의 모듈들이 추가되고, 생략되며, 다수의 모듈들로 분할되고, 다른 모듈들과 결합되며, 그리고/또는 유사한 모듈들로 대체될 수 있다. 대안의 실시예에서, 상이한 모듈들 및/또는 다른 구성의 모듈들을 갖는 디코더들이 기술된 기법들 중 하나 이상을 수행한다. 디코더의 구체적인 실시예들은 전형적으로 디코더(700, 800)의 변형 또는 보완된 버전을 사용한다. 디코더(700, 800) 내의 모듈들 사이의 도시된 관계는 디코더에서의 정보의 일반적인 흐름을 나타내고; 간단함을 위해, 다른 관계들은 도시되어 있지 않다.
VII. 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사
이 섹션은 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사의 다양한 특징들을 제시한다. 특징들 중 일부는 중간 해시 값들을 유지하고 그리고/또는 계층적 해싱을 수행하는 것에 의해 해시 테이블 구성을 가속화시킨다. 다른 특징들은 해시 테이블을 구성할 때 특정 패턴들에 의해 후보 블록들을 걸러내는 것에 의해 해시 테이블 크기를 감소시킨다. 또 다른 특징들은 해시 테이블을 사용하는 BV(block vector) 추정 동안의 참조 영역들에 대한 이용가능성 검사에 관한 것이다.
상세하게는, 기술된 혁신들은 화면 포착 콘텐츠와 같은 특정의 "인위적으로" 생성된 비디오 콘텐츠를 인코딩할 때 레이트 왜곡 성능을 향상시킬 수 있다. 화면 포착 콘텐츠는 전형적으로 반복된 구조(예컨대, 그래픽, 텍스트 문자)를 포함하며, 이는 인트라 BC 예측이 성능을 향상시킬 기회를 제공한다. 화면 포착 콘텐츠는 보통 높은 크로마 샘플링 분해능을 갖는 포맷(예컨대, YUV 4:4:4 또는 RGB 4:4:4)으로 인코딩되지만, 보다 낮은 크로마 샘플링 분해능을 갖는 포맷(예컨대, YUV 4:2:0)으로도 인코딩될 수 있다. 화면 포착 콘텐츠의 인코딩/디코딩에 대한 통상적인 시나리오는 원격 데스크톱 회의 및 자연스런 비디오 또는 다른 "혼합 콘텐츠" 비디오 상의 그래픽 오버레이(graphical overlay)의 인코딩/디코딩을 포함한다.
A. 인트라 BC 예측 모드 및 BV 값 - 서론.
인트라 BC 예측에 있어서, 픽처의 현재 블록의 샘플 값들이 동일한 픽처에서의 샘플 값들을 사용하여 예측된다. BV 값은 현재 블록으로부터 예측을 위해 사용된 샘플 값들을 포함하는 픽처의 영역("참조 영역")까지의 변위를 나타낸다. 참조 영역은 현재 블록에 대한 예측된 값들을 제공한다. 예측을 위해 사용되는 샘플 값들은 이전에 재구성된 샘플 값들이고, 따라서 인코딩 동안 인코더에서 그리고 디코딩 동안 디코더에서 이용가능하다. BV 값이 비트스트림에서 시그널링되고, 디코더는, 역시 디코더에서 재구성되는, 예측을 위해 사용할 픽처의 참조 영역을 결정하기 위해 BV 값을 사용할 수 있다. 인트라 BC 예측은 인트라 픽처 예측의 일 형태이다 - 픽처의 블록에 대한 인트라 BC 예측은 동일한 픽처 내의 샘플 값들 이외의 어떤 샘플 값들도 사용하지 않는다 -.
도 9는 현재 프레임(910)의 현재 블록(930)에 대한 인트라 BC 예측을 나타낸 것이다. 현재 블록은 CU(coding unit)의 CB(coding block), PU(prediction unit)의 PB(prediction block), TU(transform unit)의 TB(transform block), 또는 다른 블록일 수 있다. 현재 블록의 크기는 64x64, 32x32, 16x16, 8x8 또는 어떤 다른 크기일 수 있다. 보다 일반적으로, 현재 블록의 크기는 m x n이고, 여기서 m 과 n 각각은 정수이며, 여기서 m 과 n은 서로 같을 수 있거나 상이한 값들을 가질 수 있다. 이와 같이, 현재 블록은 정사각형 또는 직사각형, 또는 심지어 샘플 값들의 단일의 열 또는 행일 수 있다. 대안적으로, 현재 블록은 어떤 다른 형상(예컨대, 삼각형, 육각형, 임의의 형상, 또는 비직사각형 형상을 갖는 코딩된 비디오 객체의 구역)을 가질 수 있다.
BV(940)는 현재 블록(930)으로부터 예측을 위해 사용된 샘플 값들을 포함하는 픽처의 참조 영역(950)까지의 변위(또는 오프셋)를 나타낸다. BV(940)에 의해 표시된 참조 영역(950)은 때때로 현재 블록(930)에 대한 "매칭 블록"이라고 지칭된다. 매칭 블록은 현재 블록(930)과 동일할 수 있거나, 현재 블록(930)의 근사치일 수 있다. 현재 블록의 좌측 상단 위치가 현재 프레임에서 위치(x0, y0)에 있는 것으로 가정하고, 참조 영역의 좌측 상단 위치가 현재 프레임에서 위치(x1, y1)에 있는 것으로 가정한다. BV는 변위(x1 - x0, y1 - y0)를 나타낸다. 예를 들어, 현재 블록의 좌측 상단 위치가 위치(256, 128)에 있고, 참조 영역의 좌측 상단 위치가 위치(126, 104)에 있는 경우, BV 값은 (-130, -24)이다. 이 예에서, 음의 수평 변위는 현재 블록의 좌측에 있는 위치를 나타내고, 음의 수직 변위는 현재 블록의 위쪽에 있는 위치를 나타낸다.
인트라 BC 예측은 BC 동작들을 사용하여 중복성(redundancy)(프레임 내의 반복된 패턴 등)을 이용하는 것에 의해 코딩 효율을 향상시킬 수 있다. 그렇지만, 인코더가 평가할 수 있는 후보 블록들의 수를 고려할 때, 현재 블록에 대한 매칭 블록을 찾는 것은 계산적으로 복잡하고 시간이 많이 걸릴 수 있다. 샘플 방식(sample-wise) 블록 매칭에서 현재 블록의 샘플 값들을 단일의 후보 블록의 샘플 값들과 비교하는 것은 수천 개의 동작들을 수반할 수 있다. 예를 들어, 64x64 현재 블록의 샘플 값들과 64x64 후보 블록의 샘플 값들을 비교하는 것은 64x64=4096 개의 비교 동작들(예컨대, 감산 동작)은 물론, 비교 동작들의 결과들을 대조하는 동작들을 수반할 수 있다.
도 10은 블록 매칭 동작에서 현재 프레임(1010)의 현재 블록(1030)에 대한 후보 블록들 중 일부를 나타낸 것이다. 4 개의 BV들(1041, 1042, 1043, 1044)은 4 개의 후보 블록들에 대한 변위를 나타낸다. 후보 블록들은 프레임(1010)의 재구성된 콘텐츠 내의 어디라도 있을 수 있다. (블록들은 일반적으로 좌에서 우로, 그리고 위에서 아래로 코딩된다.) BV들(1043, 1044)에 의해 표시된 후보 블록들에 대해 도시된 바와 같이, 후보 블록이 다른 후보 블록들과 중복될 수 있다. 현재 블록과 비교되는 많은 수의 후보 블록들로 인해, BV 값들에 대한 검색 범위가 프레임의 이전에 재구성된 구역들 전부를 포함할 때 BV 추정의 계산 복잡도가 특히 문제가 된다.
도 11은 1920개 샘플 값들의 폭 및 1080개 샘플 값들의 높이를 갖는 예시적인 프레임(1110)의 블록(1130)에 대한 블록 매칭을 위한 후보 블록들의 개수를 나타내고 있다. 현재 블록(1130)은 프레임(1110)에서 위치(896, 576)에 있는 64x64 블록이고, 후보 블록들도 64x64 블록이다. 후보 블록에 대한 검색 영역이 도 11에서 해칭된 선들로 나타내어져 있다. 검색 영역 내의 임의의 64x64 블록이 후보 블록으로 간주될 수 있고, 이는 후보 블록과 현재 블록 사이에 어떤 중복도 없는 것으로 가정한다. 프레임(1110) 내의 후보 블록들의 개수는 (ypositionblock - heightblock + 1) x (widthframe - widthblock + 1) + (xpositionblock - widthblock + 1) x heightblock이고, 여기서 xpositionblock 및 ypositionblock은 프레임(1110)에서 현재 블록(1130)의 위치를 나타내고, widthframe은 프레임(1110)의 폭이며, widthblock 및 heightblock은 현재 블록(1130)의 치수이다. 도 11에 도시된 값들에 대해, 현재 블록(1130)에 대한 검색 영역에 (576 - 64 + 1) x (1920 - 64 + 1) + (896 - 64 + 1) x 64 = 1,005,593 개의 후보 블록들이 있다. 현재 블록(1130)과 심지어 가능한 후보 블록들의 작은 세트 사이에서 샘플 방식 블록 매칭 동작을 수행하는 것은 아주 계산 집중적일 것이다.
프레임 전체의 후보 블록들에 대해 블록 해시 값들이 계산되는 경우, 동작들의 개수가 훨씬 더 많다. 예를 들어, 인코더가 1920x1080 샘플 프레임에서의 8x8 후보 블록들 모두에 대해 해시 테이블을 작성하는 경우, 인코더는 2백만 개 초과의 해시 값들을 계산한다. 이와 유사하게, 검색 범위가 (움직임 추정을 위해) 다른 이전에 재구성된 프레임을 포함하는 경우, 동작들의 개수가 어쩌면 아주 많다. 예를 들어, 단일의 참조 프레임(또는 다수의 참조 프레임들)을 수반하는 움직임 추정에 있어서, 샘플 방식 블록 매칭은, 현재 블록과 비교되는 많은 수의 후보 블록들로 인해, 아주 많은 수의 동작들을 소비할 수 있다.
B. 해시 기반 블록 매칭.
인코더가 해시 기반 블록 매칭을 사용할 때, 인코더는 다수의 후보 블록들 각각에 대해 해시 값을 결정한다. 해시 테이블은 다수의 후보 블록들에 대한 해시 값들을 저장한다. 인코더는 또한 동일한 해싱 접근법에 의해 현재 블록에 대한 해시 값을 결정하고, 이어서 매칭되는 해시 값에 대해 해시 테이블을 검색한다. 2 개의 블록이 똑같은 경우, 그들의 해시 값이 동일하다. 해시 값들을 사용하여, 인코더는 현재 블록과 동일한 해시 값을 갖는 후보 블록들을 신속하고 효율적으로 식별하고, 상이한 해시 값들을 갖는 후보 블록들을 필터링 제거할 수 있다. 인코더는 이어서 현재 블록과 동일한 해시 값을 갖는 그 후보 블록들을 추가로 평가할 수 있다. (상이한 블록들이 동일한 해시 값을 가질 수 있다. 동일한 해시 값을 갖는 후보 블록들 중에서, 인코더는 현재 블록과 매칭되는 후보 블록을 식별할 수 있다.) 해시 기반 블록 매칭은 전형적으로 현재 블록에 대한 매칭 블록을 찾는 프로세스를 가속화시킨다.
일부 예시적인 구현에서, 해시 기반 블록 매칭에서 고려되는 후보 블록들은 입력 샘플 값들을 포함한다. 즉, 후보 블록들은 픽처의 입력 버전의 일부이다. 후보 블록들에 대한 해시 값들은 입력 샘플 값들로부터 결정된다. 해시 기반 블록 매칭 동안, 인코더는 입력 샘플 값들을 사용하여 현재 블록에 대한 해시 값을 결정한다. 인코더는 이를 후보 블록들에 대한 입력 샘플 값들로부터 결정된 해시 값들과 비교한다(또는 해시 값을 다른 방식으로 사용한다). 그렇다 하더라도, 매칭 블록으로부터의 재구성된 샘플 값들이 현재 블록을 표현하는데 사용된다. 이와 같이, BC 예측 동작들은 재구성된 샘플 값들을 여전히 사용한다.
대안적으로, 해시 기반 블록 매칭에서 고려되는 후보 블록들은 재구성된 샘플 값들을 포함한다. 즉, 후보 블록들은 픽처에서 이전에 인코딩되고 이어서 재구성된 콘텐츠의 일부이다. 후보 블록들에 대한 해시 값들은 재구성된 샘플 값들로부터 결정된다. 해시 기반 블록 매칭 동안, 인코더는 입력 샘플 값들을 사용하여 현재 블록에 대한 해시 값을 결정한다. 인코더는 이를 후보 블록들에 대한 재구성된 샘플 값들로부터 결정된 해시 값들과 비교한다(또는 해시 값을 다른 방식으로 사용한다). 해시 테이블이 인코딩 동안 커지는데, 그 이유는 보다 많은 후보 블록들이 픽처의 재구성된 콘텐츠에 추가되고 따라서 픽처의 나중의 블록들에 대한 해시 기반 블록 매칭에서 사용하기 위해 이용가능하게 되기 때문이다.
도 12는 해시 기반 블록 매칭에서 후보 블록들 B(x, y)에 대한 해시 값들(1200)을 나타낸 것이며, 여기서 x 및 y는, 각각, 주어진 후보 블록의 좌측 상단 위치에 대한 수평 좌표와 수직 좌표를 나타낸다. 후보 블록들은 해시 함수 h()를 사용하여 결정된 해시 값들을 가진다. 검색 범위 내의 후보 블록 B(x, y)에 대해, 인코더는 후보 블록에 대한 해시 값 h(B)를 결정한다. 인코더는 검색 범위 내의 후보 블록들 모두에 대해 해시 값들을 결정할 수 있다. 또는, 이하에서 기술되는 바와 같이(섹션 VII.G를 참조), 인코더는 특정 패턴들을 갖는 후보 블록들을 걸러낼 수 있다.
일반적으로, 해시 함수 h()는, h0 내지 hn-1로 표기된, n 개의 가능한 해시 값들을 산출한다. 주어진 해시 값에 대해, 그 해시 값을 갖는 후보 블록들이 그룹화된다. 예를 들어, 도 12에서, 후보 블록들 B(1266, 263), B(1357, 365), B(1429, 401), B(502, 464), ... 은 해시 값 h0을 갖는다. 그룹들은 상이한 개수의 후보 블록들을 포함할 수 있다. 예를 들어, 도 12에서, 해시 값 h4에 대한 그룹은 단일의 후보 블록을 포함하는 반면, 해시 값 h0에 대한 그룹은 4 개 초과의 후보 블록들을 포함한다.
이러한 방식으로, 가능한 후보 블록들이 n 개의 카테고리들로 분산되어 있다. 예를 들어, 해시 함수 h()가 12-비트 해시 값들을 생성하는 경우, 도 9에서의 후보 블록들은 212 = 4,096 개의 카테고리들로 분할되고, 각각의 카테고리는 평균 245 개의 후보 블록들을 포함한다. 일부 구현에서, 그 해시 값을 갖는 중복적인 동일한 블록들을 제거하는 것에 의해, 또는 특정 패턴들을 갖는 후보 블록들을 걸러내는 것에 의해, 해시 값마다의 후보 블록들의 개수가 추가로 감소될 수 있다. 또한, 일부 구현에서, 인코더는 상이한 해시 함수들을 사용하여 후보 블록들의 개수를 반복하여 줄일 수 있다.
해시 함수 h()는 암호화 해시 함수(cryptographic hash function), CRC(cyclic redundancy check) 함수 또는 다른 해시 함수일 수 있다. 어떤 유형의 해시 함수(예컨대, CRC 함수)는 유사한 블록들을 상이한 해시 함수들에 매핑하고, 이는 현재 블록과 정확하게 대응하는 매칭 블록을 탐색할 때 효율적일 수 있다. 다른 유형의 해시 함수(예컨대, LSH(locality-sensitive hash) 함수)는 유사한 블록들을 동일한 해시 함수에 매핑하고, 이는 매칭 블록이 현재 블록을 근사화할 수 있을 때 적당할 수 있다. 예시적인 해시 함수들이 이하에서 기술된다(섹션 VII.J를 참조).
이하에서 기술되는 바와 같이(섹션 VII.E 및 VII.F를 참조), 해시 함수 h()가 다수의 스테이지들에서 적용될 수 있다. 예를 들어, 인코더는 제1 스테이지에서 블록의 섹션들(예컨대, 행, 열, 서브블록)에 대한 중간 해시 값들을 결정할 수 있고, 이어서 블록에 대한 블록 해시 값을 결정하기 위해 제2 스테이지에서 중간 해시 값들을 해싱할 수 있다. 게다가, 인코더는 블록들을 포함하는 보다 큰 블록(수퍼블록)에 대한 수퍼블록 해시 값을 결정하기 위해 블록들에 대한 블록 해시 값들을 해싱할 수 있다. 블록 해시 값들을 계산할 때 중간 해시 값들을 유지하고 계층적 해싱 동작들을 사용하는 것은 해시 테이블을 구성하는 프로세스를 가속화시킬 수 있다. 해싱 접근법이 해시 테이블 구성 및 해시 기반 블록 매칭 동안 일관성이 있는 한, 상이한 스테이지들에서 적용되는 해싱 함수 h()에 대한 동작들이 상이한 스테이지들에서 동일하거나 상이할 수 있다.
해시 기반 블록 매칭 동안, 해시 함수 h()를 사용해, 인코더는 현재 블록 Bcurrent에 대한 해시 값을 결정한다. 도 12에서, 해시 값 h(Bcurrent)는 h3이다. 현재 블록의 해시 값을 사용하여, 인코더는 동일한 해시 값을 갖는 후보 블록들(도 12에서 윤곽선 상자로 나타내어져 있음)을 식별하고, 다른 후보 블록들을 필터링 제거할 수 있다. 해시 함수가 유사한 블록들을 상이한 해시 값들에 매핑할 때, 식별된 후보 블록들(현재 블록과 동일한 해시 값)은 현재 블록과 동일할 수 있는 블록들을 포함한다. 해시 함수가 유사한 블록들을 동일한 해시 값에 매핑할 때, 식별된 후보 블록들(현재 블록과 동일한 해시 값)은 현재 블록과 동일할 수 있거나 현재 블록의 가까운 근사치일 수 있는 블록들을 포함한다. 어느 경우든지, 이 식별된 후보 블록들로부터, 인코더는 (예컨대, 샘플 방식 블록 매칭 동작들을 사용하여) 현재 블록에 대한 매칭 블록을 식별할 수 있다.
전반적으로, 해시 값 비교가 샘플 방식 블록 매칭보다 훨씬 더 간단하기 때문에, 해시 기반 블록 매칭은 큰 검색 범위에서 후보 블록들을 평가하는 프로세스를 훨씬 더 효율적이도록 만들 수 있다. 또한, 후보 블록들에 대한 해시 값들이 인코딩 동안 픽처 내의 상이한 블록들에 대한 해시 기반 블록 매칭에서 재사용될 수 있다. 어떤 경우에, 후보 블록들에 대한 해시 값들을 계산하는 비용이 픽처 전체에 대한 해시 기반 블록 매칭 동작들에 걸쳐 점진 상각(amortize)될 수 있다.
C. 해시 기반 블록 매칭에 대한 데이터 구조.
일부 예시적인 구현에서, 인코더는 후보 블록들을 그들의 해시 값들에 따라 구성하는 데이터 구조를 사용한다. 데이터 구조는 해시 기반 블록 매칭을 보다 계산적으로 효율적이도록 만드는데 도움을 줄 수 있다. 데이터 구조는, 예를 들어, 본원에 기술되는 바와 같은 블록 해시 사전 또는 해시 테이블을 구현한다.
도 13a는 해시 기반 블록 매칭을 위해 후보 블록들을 구성하는 예시적인 데이터 구조(1300)를 나타낸 것이다. 해시 함수 h()에 대해, n 개의 가능한 해시 값들은 h0 내지 hn-1이다. 동일한 해시 값을 갖는 후보 블록들은 동일한 후보 블록 리스트에 분류된다. 주어진 후보 블록은 0 개 이상의 엔트리들을 포함할 수 있다. 예를 들어, 해시 값 h2에 대한 후보 블록 리스트는 엔트리를 갖지 않고, 해시 값 h6에 대한 리스트는 2 개의 엔트리들을 가지며, h1에 대한 리스트는 4 개 초과의 엔트리들을 가진다.
entry(hi, k)는 해시 값 hi를 갖는 k 번째 후보 블록에 대한 정보를 포함한다. 도 13b에 도시된 바와 같이, 후보 블록 리스트 내의 엔트리는 블록 B(x, y)의 주소(예컨대, 블록의 좌측 상단 위치에 대한 수평 좌표와 수직 좌표)를 포함할 수 있다. 또는, 도 13c에 도시된 바와 같이, 후보 블록 리스트 내의 엔트리는 블록 B(x, y)의 주소와, 반복적 해시 기반 블록 매칭을 위해 사용될 수 있는, 제2 해시 함수로부터의 해시 값을 포함할 수 있다.
(BV 추정 또는 움직임 추정을 위한) 현재 블록에 대한 해시 기반 블록 매칭 동안, 인코더는 현재 블록의 해시 값 h(Bcurrent)을 결정한다. 인코더는 동일한 해시 값을 갖는 후보 블록 리스트는 유지하고 다른 n-1 개의 리스트들을 제외시킨다. 매칭 블록을 선택하기 위해, 인코더는 현재 블록을 유지된 후보 블록 리스트에서 후보 블록(들)(있는 경우)과 비교할 수 있다. 이와 같이, 해시 값 h(Bcurrent)을 사용하는 간단한 탐색 동작에 의해, 인코더는 (평균적으로) 후보 블록들의 (n-1)/n을 제거할 수 있고, (평균적으로) 유지된 리스트 내의 나머지 1/n 후보 블록들에 집중할 수 있어, 샘플 방식 블록 매칭 동작들의 개수를 상당히 감소시킬 수 있다.
데이터 구조는 각각의 엔트리가 후보 블록을 표현하는 동적 사전(dynamic dictionary)인 것으로 간주될 수 있다. 후보 블록들에 대한 해시 값들이 입력 샘플 값들로부터 결정될 때, 보다 많은 블록들에 대한 블록 해시 값들이 계산되기 때문에 데이터 구조가 커진다. 블록 해시 값들에 의해 표현되는 블록들의 개수는, 인코더가 몇 개의 블록들을 걸러내는지에 따라, 달라질 수 있다. 또한, 주어진 블록 해시 값을 갖는 블록들의 개수는 픽처마다 변할 것이다. 후보 블록들에 대한 해시 값들이 재구성된 샘플 값들로부터 결정될 때, 데이터 구조가 인코딩 동안 커지는데, 그 이유는 보다 많은 후보 블록들이 픽처의 재구성된 콘텐츠에 추가되고 따라서 픽처의 나중의 블록들에 대한 해시 기반 블록 매칭에서 사용하기 위해 이용가능하게 되기 때문이다. 상세하게는, 현재 블록이 인코딩된 후에, 방금 인코딩된 현재 블록과 중복되는 새로운 후보 블록들이 해시 기반 블록 매칭에서 사용하기 위해 이용가능하다. 예를 들어, 8x8 블록이 인코딩된 후에, 8x8 블록이 후보 블록으로서 이용가능하다. 현재 블록의 좌측으로 하나의 샘플 위치의 증분 천이(incremental shift)들에 위치된 7 개의 8x8 블록들이 또한 후보 블록으로서 이용가능하다. 그리고, 현재 블록으로부터 위쪽으로 하나의 샘플 위치의 증분 천이들에 있는 7 개의 행들 각각에 대해, 8 개의 8x8 블록들이 후보 블록으로서 이용가능하다. 이와 같이, 현재 8x8 블록이 인코딩된 후에 최대 8x8 = 64 개의 새로운 후보 블록들에 대한 엔트리들이 데이터 구조에 추가될 수 있다. 이와 유사하게, 현재 64x64 블록이 인코딩된 후에, 후보 블록들에 대한 최대 4096 개의 엔트리들이 데이터 구조에 추가될 수 있다.
상이한 크기의 블록들에 대해 상이한 데이터 구조들이 사용될 수 있다. 예를 들어, 하나의 데이터 구조는 8x8 후보 블록들에 대한 해시 값들을 포함하고, 제2 데이터 구조는 16x16 후보 블록들에 대한 해시 값들을 포함하며, 제3 데이터 구조는 32x32 후보 블록들에 대한 해시 값들을 포함하고, 이하 마찬가지이다. 해시 기반 블록 매칭 동안 사용되는 데이터 구조는 현재 블록의 크기에 의존한다. 임의의 크기의 현재 블록이 인코딩된 후에, 데이터 구조들 모두가 업데이트될 수 있고, 여기서 새로운 후보 블록들이 해시 기반 블록 매칭을 이용가능하게 되어 있다.
대안적으로, 상이한 크기의 블록들에 대해 단일의 통합된 데이터 구조가 사용될 수 있다. 해시 함수가 n-비트 해시 값을 생성할 수 있고, 여기서 n-비트 해시 값의 m 비트는 m-비트 해시 함수에 따른 주어진 블록 크기의 가능한 블록들 중 해시 값을 나타내고, n-비트 해시 값의 나머지 n-m 비트는 주어진 블록 크기를 나타낸다. 예를 들어, 14-비트 해시 함수의 처음 2 비트는 블록 크기를 나타낼 수 있는 반면, 나머지 12 비트는 12-비트 해시 함수에 따른 해시 값을 나타낸다. 또는, 해시 함수는 블록의 크기에 관계없이 m-비트 해시 값을 생성할 수 있고, 데이터 구조에서의 후보 블록에 대한 엔트리는, 해시 기반 블록 매칭에서 사용될 수 있는, 후보 블록에 대한 블록 크기를 나타내는 정보를 저장한다. 섹션 VII.J는 해시 값들이 단일의 통합된 데이터 구조에 구성될 수 있는 예시적인 해시 함수들에 관한 추가 상세를 포함한다.
고해상도 픽처에 대해, 데이터 구조는 아주 많은 수의 후보 블록들을 표현하는 정보를 저장할 수 있다. 데이터 구조에 대해 사용되는 메모리의 양을 감소시키기 위해, 인코더는 중복적인 값들을 제거할 수 있다. 예를 들어, 인코더는 이하의 접근법을 사용함으로써 똑같은 블록들을 데이터 구조에 추가하는 것을 회피할 수 있다. 새로운 후보 블록 Bnew를 데이터 구조에 추가하기 전에, 인코더는 Bnew와 똑같은, 데이터 구조에 표현된, 후보 블록이 이미 있는지를 검사한다. 이 검사를 위해, 인코더는 새로운 후보 블록에 대한 해시 값을 결정하고, 이어서 동일한 해시 값을 갖는, 데이터 구조에 표현된, 그 후보 블록들을 추가로 평가할 수 있다. (상이한 해시 값들을 갖는 후보 블록들은 새로운 후보 블록 Bnew와 꼭 상이하다.) 데이터 구조가 Bnew와 똑같은 후보 블록을 이미 포함하는 경우, Bnew가 이전의 똑같은 후보 블록 대신에 추가되거나, 이전의 똑같은 후보 블록이 단순히 유지된다. 데이터 구조가 Bnew와 똑같은 후보 블록을 포함하지 않는 경우, Bnew가 데이터 구조에 추가된다.
일반적으로, 똑같은 블록들을 제거하는 것에 의해 데이터 구조의 크기를 감소시키는 것은 코딩 효율을 해칠 수 있다. 다수의 똑같은 후보 블록들이 이용가능할 가능성이 있을 때, 그 결과, 현재 블록에 대한 상이한 BV 값들이 얻어질 수 있고, 여기서 BV 값들 중 하나는 다른 것(들)보다 더 적은 비트들로 인코딩될 수 있다. 또한, 똑같은 원래의 샘플 값들(그리고 따라서 동일한 해시 값)을 갖는 후보 블록들이 상이한 재구성된 값들을 가질 수 있고, 이 경우에, 후보 블록들 중 하나를 사용하면 그 결과 다른 것(들)을 사용하는 것보다 더 나은 예측이 얻어질 수 있다. 다수의 똑같은 후보 블록들 중 하나만이 데이터 구조에 유지되는 경우, 인코더는 현재 블록에 대해 보다 효율적으로 인코딩될 BV 값을 알지 못할 수 있거나, 현재 블록에 대한 좋지 않은 예측을 가져올 재구성된 값들을 갖는 블록을 선택할지도 모른다. 이와 같이, 똑같은 블록들을 제거할지의 여부를 결정함으로써, 인코더는 데이터 구조에 대한 메모리와 코딩 효율 간에 트레이드오프할 수 있다.
인코더는 또한, 이하에서 기술되는 바와 같이(섹션 VII.G를 참조), 블록들의 콘텐츠에 따라, 후보 블록들을 걸러낼 수 있다.
D. 반복적 해시 기반 블록 매칭.
인코더가 n 개의 가능한 해시 값들을 갖는 단일의 해시 함수를 사용할 때, 인코더는 현재 블록의 해시 값에 기반하여 n-1 개의 후보 블록 리스트들을 제외시킬 수 있지만, 인코더는 매칭되는 해시 값을 갖는 리스트의 나머지 후보 블록(들)(있는 경우)에 대해 샘플 방식 블록 매칭 동작들을 수행할 필요가 여전히 있을 수 있다. 또한, 후보 블록들을 구성하는 데이터 구조를 업데이트할 때, 인코더는 똑같은 블록들을 식별하기 위해 샘플 방식 블록 매칭 동작들을 수행할 필요가 있을 수 있다. 종합하면, 이 샘플 방식 블록 매칭 동작들이 계산 집중적일 수 있다.
따라서, 일부 예시적인 구현에서, 인코더는 반복적 해시 기반 블록 매칭을 사용한다. 반복적 해시 기반 블록 매칭은 블록 매칭 프로세스를 가속화시키고 또한 후보 블록들을 구성하는 데이터 구조를 업데이트하는 프로세스를 가속화시킬 수 있다.
반복적 해시 기반 블록 매칭은 상이한 해시 함수들에 의해 결정된 다수의 해시 값들을 사용한다. 블록 B(현재 블록 또는 후보 블록)에 대해, 해시 값 h(B)에 부가하여, 인코더는 상이한 해시 함수 h'()을 사용하여 다른 해시 값 h'(B)를 결정한다. 현재 블록에 대한 제1 해시 값 h(Bcurrent)에 의해, 인코더는 제1 해시 함수 h()에 대해 동일한 해시 값을 갖는 후보 블록들을 식별한다. 이 식별된 후보 블록들 중 일부를 추가로 제외시키기 위해, 인코더는 상이한 해시 함수를 사용하여 결정되는, 현재 블록에 대한 제2 해시 값 h'(Bcurrent)를 사용한다. 인코더는, 후보 블록들을 추가로 필터링 제거하기 위해, 제2 해시 값 h'(Bcurrent)를 (동일한 제1 해시 값을 갖는) 이전에 식별된 후보 블록들에 대한 제2 해시 값들과 비교한다. 해시 테이블은 상이한 해시 함수들에 따라 후보 블록들에 대한 해시 값들을 추적한다.
도 13a의 예에서, h(Bcurrent) = h3인 경우, 인코더는 추가적인 세분화를 위해 entry(3, 0), entry (3, 1), entry(3, 2), entry(3, 3), ... 를 갖는 후보 블록들을 선택한다. 도 13b에 도시된 바와 같이, 후보 블록 B에 대해, 엔트리는 블록 주소와 해시 함수 h'()로부터의 제2 해시 값 h'(B)를 포함한다. 인코더는 현재 블록에 대한 제2 해시 값 h'(Bcurrent)를 entry(3, 0), entry (3, 1), entry(3, 2), entry(3, 3), ...를 갖는 각자의 후보 블록들에 대한 제2 해시 값 h'(B)와 비교한다. 제2 해시 값 비교의 결과에 기반하여, 인코더는 h(Bcurrent) 및 h'(Bcurrent)와, 각각, 매칭되는 제1 해시 값 및 제2 해시 값을 갖는 후보 블록들(있는 경우)을 남겨두면서, 후보 블록들을 추가로 제외시킬 수 있다. 인코더는 매칭 블록을 선택하기 위해 임의의 나머지 후보 블록들에 대해 샘플 방식 블록 매칭을 수행할 수 있다.
도 14a 내지 도 14c는 상이한 데이터 구조를 사용하는 반복적 해시 기반 블록 매칭의 다른 예를 나타낸다. 도 14a에서의 데이터 구조(1400)는 n1 개의 가능한 해시 값들을 갖는 제1 해시 함수 h()로부터의 제1 해시 값에 의해 후보 블록들을 구성한다. 데이터 구조(1400)는 h0 ... hn1-1로부터의 해시 값들에 대한 리스트들을 포함한다. 이 예에서, 인코더는 현재 블록에 대한 제1 해시 값 h(Bcurrent) = h2를 결정하고, 구조(1400)로부터 h2에 대한 리스트를 선택한다.
도 14b에 도시된 바와 같이, h2에 대한 리스트(1410)는 n2 개의 가능한 해시 값들을 갖는 제2 해시 함수 h'()로부터의 제2 해시 값에 의해 나머지 후보 블록들을 추가로 구성하는 다수의 리스트들을 포함한다. 리스트(1410)는 h'0 ... h'n2-1로부터의 해시 값들에 대한 리스트들을 포함하고, 각각은, 도 14c에서의 엔트리(1420)에 대해 도시된 바와 같이, 블록 주소들(예컨대, 각자의 후보 블록들의 좌측 상단 위치들에 대한 수평 좌표와 수직 좌표)을 갖는 엔트리들을 포함한다. 이 예에서, 인코더는 현재 블록에 대한 제2 해시 값 h'(Bcurrent) = h'0를 결정하고, 구조(1410)로부터 h'0에 대한 리스트를 선택한다. h'0에 대한 리스트에서의 후보 블록들에 대해, 인코더는 매칭 블록을 선택하기 위해 샘플 방식 블록 매칭을 수행할 수 있다. 이 예에서, 제2 해시 값들에 대한 리스트들은 제1 해시 값에 대한 주어진 리스트에 특유하다. 대안적으로, 제2 해시 값들에 대한 하나의 리스트 세트가 있고, 인코더는 (1) 제1 해시 값들에 대한 매칭 리스트에 그리고 또한 (2) 제2 해시 값들에 대한 매칭 리스트에 있는 임의의 후보 블록들을 식별한다.
해시 기반 블록 매칭 이외에, 제2 해시 함수 h'()는 후보 블록들을 구성하는 데이터 구조를 업데이트하는 프로세스를 단순화시키는데 사용될 수 있다. 예를 들어, 인코더가 새로운 후보 블록이 데이터 구조에 이미 표현되어 있는 후보 블록과 똑같은지의 여부를 검사할 때, 인코더는 똑같지 않은 블록들을 필터링 제거하기 위해 상이한 해시 함수들에 의해 다수의 해시 값들을 사용할 수 있다. 나머지 후보 블록들에 대해, 인코더는 임의의 똑같은 블록을 식별하기 위해 샘플 방식 블록 매칭을 수행할 수 있다.
이전의 예들에서, 반복적 해시 방식 블록 매칭 및 업데이트는 2 개의 상이한 해시 함수를 사용한다. 대안적으로, 인코더는 해시 방식 블록 매칭을 추가로 가속화시키거나 똑같지 않은 블록들을 필터링 제거하기 위해 3 개, 4 개 또는 그 이상의 해시 함수들을 사용하고, 그에 의해 샘플 방식 블록 매칭 동작들의 개수를 감소시킨다.
대안적으로, 저복잡도 인코더의 경우, 인코더는 해시 값들이 매칭될 때 샘플 방식 블록 매칭 동작들을 생략할 수 있다. 많은 수의 가능한 해시 값들을 갖는 해시 함수들에 대해, 2 개의 블록에 대한 모든 해시 값들이 매칭되는 경우 2 개의 블록이 똑같을 확률이 높다. 상세하게는, 데이터 구조를 업데이트할 때 블록들이 똑같다는 것을 확인하기 위해 샘플 방식 블록 매칭을 사용하는 대신에, 인코더는 블록들이 똑같은지의 여부를 평가하기 위해 해시 값 비교에 의존할 수 있다. 인코더는, 새로운 후보 블록과 기존의 후보 블록이 똑같다는 가정 하에서, 2 개의 블록에 대해 모든 해시 값들이 매칭되면, 후보 블록을 데이터 구조로부터 제거한다(또는 새로운 후보 블록을 추가하지 않는다). 해시 값이 매칭되지 않으면, 새로운 후보 블록이 데이터 구조에 추가된다. 이 결과, 어떤 똑같지 않은 블록들이 데이터 구조로부터 제외될 수 있지만, 샘플 방식 블록 매칭 동작들이 회피된다.
E. 유지된 중간 해시 값들에 의한 해시 테이블 구성.
해시 방식 블록 매칭을 위한 해시 테이블을 작성하는 것의 복잡도는 중간 해시 값들을 유지하고 재사용하는 것에 의해 감소될 수 있다. 인코더는 후보 블록들을 섹션들로 분할한다. 후보 블록은 정사각형 블록 또는 직사각형 블록(심지어 단일 행 또는 열의 샘플 값들)일 수 있거나, 어떤 다른 형상(예컨대, 삼각형, 육각형)을 가질 수 있다. 후보 블록의 섹션들은 후보 블록의 행, 열, 서브블록 또는 다른 부분(예컨대, 삼각형, 육각형, 또는 임의의 형상)일 수 있다. 인코더는 후보 블록의 섹션들에 대한 중간 해시 값들을 계산하고 그의 섹션들에 대한 중간 해시 값들을 사용하여 후보 블록에 대한 블록 해시 값을 계산한다. 섹션들 중 적어도 일부에 대해, 인코더는 다른 후보 블록들에 대한 블록 해시 값들을 계산하는데 재사용되는 중간 해시 값들을 유지한다.
도 15a 및 도 15b는 해시 테이블 구성 동안 후보 블록들의 행들에 대한 중간 해시 값들의 해싱을 나타낸 것이다. 도 15a는 프레임의 몇 개의 8x8 블록들에 대한 샘플 값들의 행들(1500)을 나타낸 것이고, 여기서 각각의 행은 8 개의 샘플 값들을 포함한다. 제1 후보 블록은 행 0 내지 행 7을 포함하고, 제2 후보 블록은 행 1 내지 행 8을 포함하며, 제3 후보 블록은 행 2 내지 행 9를 포함하고, 이하 마찬가지이다. 인코더는 행들 각각에 대해 해시 값을 계산한다. 이 행 해시 값들은, 해시 기반 블록 매칭에서 직접 사용되지 않고 그 대신에 해시 기반 블록 매칭에서 사용되는 블록 해시 값들을 계산하는데 사용된다는 점에서, 중간 해시 값이다. 인코더는 행 0에 대한 중간 해시 값 hashrow _0, 행 1에 대한 중간 해시 값 hashrow _1 등을 계산한다.
도 15b에 도시된 바와 같이, 인코더는 중간 해시 값들을, 행들 각각에 대한 중간 해시 값을 갖는 엔트리를 포함하는 1차원 어레이(1510)로서 그룹화할 수 있다. 행 0 내지 행 7을 포함하는 후보 블록(블록 0)에 대해, 인코더는 행 0 내지 행 7에 대한 8 개의 중간 해시 값들을 해싱하는 것에 의해 블록 해시 값 hashblock_0을 계산한다. 하나의 샘플만큼 수직으로 오프셋되어 있는 후보 블록(블록 1)에 대해, 인코더는 행 1 내지 행 8에 대한 8 개의 중간 해시 값들을 해싱하는 것에 의해 블록 해시 값 hashblock_1을 계산한다. 블록 1에 대해, 인코더는 블록 0에 대해 이전에 계산된, 행 1 내지 행 7에 대한 중간 해시 값들을 재사용할 수 있다. 이러한 방식으로, 블록 해시 값들이 하나의 샘플만큼 수직으로 오프셋되어 있는 중복되는 후보 블록들에 대해 연속적으로 계산될 수 있다. 이와 같이, 블록 0 아래의 임의의 후보 블록에 대해, 인코더는 후보 블록의 8 개의 행들 중 7 개에 대해 중간 해시 값들을 계산할 필요가 없고, 이는 해시 테이블 구성의 계산 복잡도를 상당히 감소시킬 수 있다.
프레임 전체에 대해, 인코더는 다음과 같이 블록 해시 값들을 계산할 수 있다. 인코더는 단일의 샘플만큼 수직으로 오프셋되어 있는 수직으로 중복되는 후보 블록들의 블록 열에 대해 연속적으로 블록 해시 값들을 계산한다. 인코더는 단일의 샘플만큼 수평으로 오프셋되어 있는 블록 열들에 대해 블록 열마다 기반하여 그 프로세스를 반복한다.
대안적으로, 행들은 어떤 다른 개수의 샘플 값들을 갖고 그리고/또는 후보 블록들은 어떤 다른 개수의 행들을 가진다. 예를 들어, 후보 블록들이 4x4 블록이고, 여기서 각각의 후보 블록은 각각이 4 개의 샘플 값들을 갖는 4 개의 행들을 포함한다. 또는, 후보 블록들이 16x16 블록이고, 여기서 각각의 후보 블록은 각각이 16 개의 샘플 값들을 갖는 16 개의 행들을 포함한다. 또는, 후보 블록들이 4x8 블록이고, 여기서 각각의 후보 블록은 각각이 8 개의 샘플 값들을 갖는 4 개의 행들을 포함한다. 또는, 후보 블록이 어떤 다른 크기를 갖는다.
도 16a 및 도 16b는 해시 테이블 구성 동안 후보 블록들의 열들에 대한 중간 해시 값들의 해싱을 나타낸 것이다. 도 16a는 프레임의 몇 개의 8x8 블록들에 대한 샘플 값들의 열들(1600)을 나타낸 것이고, 여기서 각각의 열은 8 개의 샘플 값들을 포함한다. 제1 후보 블록은 열 0 내지 열 7을 포함하고, 제2 후보 블록은 열 1 내지 열 8을 포함하며, 제3 후보 블록은 열 2 내지 열 9를 포함하고, 이하 마찬가지이다. 인코더는 열들 각각에 대해 해시 값을 계산한다. 이 열 해시 값들은 중간 해시 값이다. 즉, 인코더는 열 0에 대한 중간 해시 값 hashcolumn_0, 열 1에 대한 중간 해시 값 hashcolumn_1 등을 계산한다.
도 16b에 도시된 바와 같이, 인코더는 중간 해시 값들을, 열들 각각에 대한 중간 해시 값을 갖는 엔트리를 포함하는 1차원 어레이(1610)로서 그룹화할 수 있다. 열 0 내지 열 7을 포함하는 후보 블록(블록 0)에 대해, 인코더는 열 0 내지 열 7에 대한 8 개의 중간 해시 값들을 해싱하는 것에 의해 블록 해시 값 hashblock_0을 계산한다. 하나의 샘플만큼 수평으로 오프셋되어 있는 후보 블록(블록 1)에 대해, 인코더는 열 1 내지 열 8에 대한 8 개의 중간 해시 값들을 해싱하는 것에 의해 블록 해시 값 hashblock_1을 계산한다. 블록 1에 대해, 인코더는 블록 0에 대해 이전에 계산된, 열 1 내지 열 7에 대한 중간 해시 값들을 재사용할 수 있다. 블록 해시 값들이 하나의 샘플만큼 수평으로 오프셋되어 있는 중복되는 후보 블록들에 대해 연속적으로 계산될 수 있다. 이와 같이, 블록 0 이후의 임의의 후보 블록에 대해, 인코더는 후보 블록의 8 개의 열들 중 7 개에 대해 중간 해시 값들을 계산할 필요가 없고, 이는 해시 테이블 구성의 계산 복잡도를 상당히 감소시킬 수 있다.
프레임 전체에 대해, 인코더는 다음과 같이 블록 해시 값들을 계산할 수 있다. 인코더는 단일의 샘플만큼 수평으로 오프셋되어 있는 수평으로 중복되는 후보 블록들의 블록 행에 대해 연속적으로 블록 해시 값들을 계산한다. 인코더는 단일의 샘플만큼 수직으로 오프셋되어 있는 블록 행들에 대해 블록 행마다 기반하여 그 프로세스를 반복한다.
대안적으로, 열들은 어떤 다른 개수의 샘플 값들을 갖고 그리고/또는 후보 블록들은 어떤 다른 개수의 열들을 가진다. 예를 들어, 후보 블록들은 4x4 블록, 16x16 블록, 4x8 블록, 또는 어떤 다른 크기를 갖는 블록이다.
도 17a 및 도 17b는 해시 테이블 구성 동안 후보 블록들의 서브블록들에 대한 중간 해시 값들의 해싱을 나타낸 것이다. 도 17a는 프레임의 몇 개의 8x8 블록들에 대한 샘플 값들의 서브블록들(1700)을 나타낸 것이다. 제1 후보 블록은 4x4 서브블록 0 내지 4x4 서브블록 3을 포함한다. 제2 후보 블록은 서브블록 2 내지 서브블록 5를 포함하고, 제3 후보 블록은 서브블록 4 내지 서브블록 7을 포함하며, 이하 마찬가지이다. 인코더는 서브블록들 각각에 대해 해시 값을 계산한다. 이 서브블록 해시 값들은 중간 해시 값이다. 인코더는 서브블록 0에 대한 중간 해시 값 hashsub-block_0, 서브블록 1에 대한 중간 해시 값 hashsub-block_1 등을 계산한다. 주어진 서브블록에 대한 서브블록 해시 값이 서브블록의 샘플 값들로부터 또는 서브블록의 행들 또는 열들의 중간 해시 값들로부터 계산될 수 있다.
도 17b에 도시된 바와 같이, 인코더는 서브블록들에 대한 중간 해시 값들을, 서브블록들 각각에 대한 중간 해시 값을 갖는 엔트리를 포함하는 1차원 어레이(1710)로서 그룹화할 수 있다. 서브블록 0 내지 서브블록 3을 포함하는 후보 블록(블록 0)에 대해, 인코더는 서브블록 0 내지 서브블록 3에 대한 4 개의 중간 해시 값들을 해싱하는 것에 의해 블록 해시 값 hashblock_0을 계산한다. 블록 해시 값들이 정수 개의 서브블록들만큼 수직으로 그리고/또는 정수 개의 서브블록들만큼 수평으로 오프셋되어 있는 중복되는 후보 블록들에 대해 연속적으로 계산될 수 있다. 예를 들어, 하나의 서브블록만큼 수직으로 오프셋되어 있는 후보 블록(블록 1)에 대해, 인코더는 서브블록 2 내지 서브블록 5에 대한 4 개의 중간 해시 값들을 해싱하는 것에 의해 블록 해시 값 hashblock_1을 계산한다. 후보 블록 1에 대해, 인코더는 후보 블록 0에 대해 이전에 계산된, 서브블록 2 및 서브블록 3에 대한 중간 해시 값들을 재사용할 수 있다. 이와 같이, 많은 경우에, 인코더는 후보 블록의 서브블록들 중 다수에 대해 중간 해시 값들을 계산할 필요가 없고, 이는 해시 테이블 구성의 계산 복잡도를 상당히 감소시킬 수 있다.
프레임 전체에 대해, 인코더는 다음과 같이 블록 해시 값들을 계산할 수 있다. 인코더는, 단일의 서브블록만큼 수직으로 오프셋되어 있는 수직으로 중복되는 후보 블록들의 블록 열에 대해 블록 해시 값들을 연속적으로 계산하고, 단일의 서브블록만큼 수평으로 오프셋되어 있는 블록 열들에 대해 블록열마다 기반하여 그 프로세스를 반복한다. 또는, 인코더는, 단일의 서브블록만큼 수평으로 오프셋되어 있는 수평으로 중복되는 후보 블록들의 블록 행에 대해 블록 해시 값들을 연속적으로 계산할 수 있고, 단일의 서브블록만큼 수직으로 오프셋되어 있는 블록 행들에 대해 블록행마다 기반하여 그 프로세스를 반복한다.
서브블록들의 크기는 2x2, 2x4, 4x2, 4x4, 4x8, 8x4, 8x8 또는 어떤 다른 크기의 서브블록일 수 있다. 일반적으로, 서브블록들의 크기는 수직으로 이원 인자(dyadic factor)(예컨대, 1/2, 1/4 및 1/8)에 의해 그리고/또는 수평으로 이원 인자(예컨대, 1/2, 1/4 및 1/8)에 의해 후보 블록의 크기에 관련되어 있다. 이와 같이, 후보 블록은 중간 해시 값들을 갖는 2 개의 서브블록들, 4 개의 서브블록들, 8 개의 서브블록들, 16 개의 서브블록들, 32 개의 서브블록들, 64 개의 서브블록들, 또는 어떤 다른 개수의 서브블록들을 포함할 수 있다.
도 18은 중간 해시 값들의 해싱 및 유지에 의한 해시 테이블 구성에 대한 기법(1800)을 나타낸 것이다. 도 3, 도 5a 및 도 5b 또는 도 6a 및 도 6b를 참조하여 기술된 것과 같은 이미지 인코더 또는 비디오 인코더는 기법(1800)을 수행할 수 있다.
다수의 후보 블록들 중 주어진 후보 블록에 대해, 인코더는 블록 해시 값을 결정한다. 구체적으로는, 인코더는 처리될 다음 후보 블록을 가져온다(1810). 그 후보 블록의 다수의 섹션들 각각에 대해, 인코더는 섹션에 대한 중간 해시 값을 찾는다(1820). 섹션들은 주어진 후보 블록의 행, 열, 서브블록 또는 어떤 다른 부분(예컨대, 삼각형, 육각형, 또는 임의의 형상)일 수 있다. 주어진 섹션에 대해 중간 해시 값이 (예컨대, 다른 후보 블록에 대해 이전에 계산되었기 때문에) 유지된 경우, 인코더는 주어진 섹션에 대한 중간 해시 값을 메모리로부터 판독할 수 있다. 그렇지 않은 경우, 인코더는 주어진 섹션에 대한 중간 해시 값을 계산한다. 예시적인 해시 함수들이 이하에서 기술된다(섹션 VII.J를 참조). 중간 해시 값들이, 구현에 따라, 다수의 섹션들에 대한 원래의 샘플 값들 또는 재구성된 샘플 값들을 사용하여 계산될 수 있다.
인코더는 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 후보 블록에 대한 블록 해시 값을 계산한다(1830). 예를 들어, 인코더는 중간 해시 값들을 해싱한다. 인코더는 후보 블록에 대한 블록 해시 값을 계산할 때 그리고 중간 해시 값들을 계산할 때 동일한 해시 함수를 사용할 수 있다. 또는, 인코더는 블록 해시 값과 중간 해시 값들에 대해 상이한 해시 함수들을 사용할 수 있다. 예시적인 해시 함수들이 이하에서 기술된다(섹션 VII.J를 참조).
인코더는 다수의 후보 블록들 중 하나 이상의 다른 후보 블록들에 대한 블록 해시 값(들)을 계산하는데 재사용하기 위해 중간 해시 값들 중 적어도 일부를 유지한다(1840). 인코더는 중간 해시 값들을 (이 섹션에서 앞서 기술된 바와 같이) 1차원 어레이 또는 다른 데이터 구조에 저장할 수 있다.
인코더는 후보 블록에 대한 블록 해시 값을 해시 테이블에 추가한다(1850). 해시 테이블은 앞서 기술된 바와 같이 구성된 데이터 구조(섹션 VII.C를 참조) 또는 다른 데이터 구조일 수 있다.
인코더는 다음 후보 블록을 계속할지의 여부를 결정(1860)한다. 그러한 경우, 인코더는 다음 후보 블록을 가져오는 것(1810), 그의 섹션들에 대한 중간 해시 값들을 찾는 것(1820) 및 후보 블록에 대한 블록 해시 값을 계산하는 것(1830)을 계속한다. 이러한 방식으로, 인코더는 유지된 중간 해시 값들을 사용하여 다수의 후보 블록들에 대한 블록 해시 값들을 결정할 수 있고, 이는 해시 테이블을 구성하는 것의 계산 복잡도를 감소시킨다.
주어진 후보 블록의 섹션들이 주어진 후보 블록에서의 샘플 값들의 행들일 때, 중간 해시 값들은 행 해시 값(row hash value)이다. 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 샘플 값들만큼 수직으로 오프셋되어 있는 후보 블록(들)에 대한 블록 해시 값(들)을 계산하는데 중간 해시 값들 중 적어도 일부가 재사용될 수 있다.
또는, 주어진 후보 블록의 섹션들이 주어진 후보 블록에서의 샘플 값들의 열들일 때, 중간 해시 값들은 열 해시 값(column hash value)이다. 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 샘플 값들만큼 수평으로 오프셋되어 있는 후보 블록(들)에 대한 블록 해시 값(들)을 계산하는데 중간 해시 값들 중 적어도 일부가 재사용될 수 있다.
또는, 주어진 후보 블록의 섹션들이 주어진 후보 블록에서의 샘플 값들의 서브블록들일 때, 중간 해시 값들은 서브블록 해시 값이다. 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 서브블록들만큼 수평으로 그리고/또는 수직으로 오프셋되어 있는 후보 블록(들)에 대한 블록 해시 값(들)을 계산하는데 중간 해시 값들 중 적어도 일부가 재사용될 수 있다.
도 18에 도시된 바와 같이 계산된 블록 해시 값들은, 이하에서 기술되는 바와 같이(섹션 VII.F를 참조), 차례로 보다 큰 후보 블록들에 대한 블록 해시 값들(즉, 후보 수퍼블록들에 대한 수퍼블록 해시 값들)을 계산하는데 사용될 수 있다. 다수의 후보 블록들을 포함하는 후보 수퍼블록에 대해, 인코더는, 후보 수퍼블록의 후보 블록들에 대한 블록 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 수퍼블록 해시 값을 결정한다.
인코더는 BV 추정 또는 움직임 추정 동안 해시 기반 블록 매칭을 위해 도 18에 도시된 바와 같이 구성된 해시 테이블을 사용할 수 있다. BV 추정을 위해, 현재 픽처는 다수의 후보 블록들을 포함한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하고, 이어서 현재 블록의 블록 해시 값과 매칭되는 블록 해시 값을 갖는 (현재 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 해시 테이블을 검색한다. 또는, 움직임 추정을 위해, 참조 픽처는 다수의 후보 블록들을 포함한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하고, 이어서 현재 블록의 블록 해시 값과 매칭되는 블록 해시 값을 갖는 (참조 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 해시 테이블을 검색한다. BV 추정 또는 움직임 추정을 위해, 현재 블록에 대한 블록 해시 값이 주어진 후보 블록에 대한 블록 해시 값 및 해시 테이블에서의 다른 블록 해시 값들과 동일한 해싱 접근법을 사용하여 결정된다.
F. 계층적 해싱에 의한 해시 테이블 구성.
일부 예시적인 구현에서, 인코딩되는 현재 블록의 크기가 변할 수 있다. 예를 들어, 현재 블록은 4x4, 8x8, 16x16, 32x32 또는 64x64 블록, 다른 정사각형 블록일 수 있다. 또는, 현재 블록은 직사각형(예컨대, 4x8, 8x4, 8x16, 16x8, 16x32, 32x16, 32x64 또는 64x32), 또는 심지어 단일 행 또는 열의 샘플 값들일 수 있다. 또는, 현재 블록이 삼각형, 육각형 또는 임의의 형상일 수 있다. 이 구현들에서 해시 기반 블록 매칭을 위해, 인코더는 상이한 크기의 후보 블록들(현재 블록과 동일한 가능한 크기들)에 대한 블록 해시 값들을 결정하는데, 그 이유는 현재 블록이 그 상이한 크기들 중 임의의 크기를 가질 수 있기 때문이다. 예를 들어, 인코더는 4x4 후보 블록, 8x8 후보 블록, 16x16 후보 블록, 32x32 후보 블록, 64x64 후보 블록 등에 대한 블록 해시 값들을 결정한다.
인코더는 블록 해시 값들을 계층적 방식으로 계산할 수 있다. 예를 들어, 인코더는 블록의 서브블록들의 서브블록 해시 값들을 해싱하는 것에 의해 블록에 대한 블록 해시 값을 결정한다. 또는, 인코더는 수퍼블록의 블록들의 블록 해시 값들을 해싱하는 것에 의해 수퍼블록에 대한 수퍼블록 해시 값을 결정한다. 서브블록, 블록 및 수퍼블록이라는 용어들은 상이한 크기들의 블록들을 나타내는 상대적 용어이다. 수퍼블록은 블록들을 포함하고, 블록은 서브블록들을 포함한다. 보다 일반적으로, 수퍼블록 또는 서브블록은 블록의 일 예이다. 이와 유사하게, 서브블록 해시 값 또는 서브블록 해시 값은 블록 해시 값의 일 예이다. 서브블록 및 수퍼블록이라는 용어들은 상이한 크기들의 블록들 사이의 계층적 관계를 나타내기 위해 본원에서 사용된다.
예를 들어, 도 17a에 도시된 서브블록들(1700)이 4x4 블록인 것으로 가정한다. 4x4 블록들 중 4 개가 8x8 블록으로 구성될 수 있다. 8x8 블록에 대한 블록 해시 값을 계산하기 위해, 인코더 8x8 블록의 4x4 블록들(서브블록들)에 대한 블록 해시 값들(서브블록 해시 값들)을 해싱할 수 있다. 이 예에서, 주어진 서브블록 자체는 해시 기반 블록 매칭을 위한 후보 블록일 수 있거나, 가장 작은 후보 블록보다 더 작은 블록일 수 있다.
도 19a 및 도 19b는 또한 해시 테이블 구성 동안 계층적 해싱을 나타낸 것이다. 도 19a는 프레임의 몇 개의 후보 블록들에 대한 샘플 값들의 서브블록들(1900)을 나타낸 것이다. 블록 0은 서브블록 0 내지 서브블록 3을 포함한다. 블록 1은 서브블록 4 내지 서브블록 7을 포함하고, 블록 2는 서브블록 8 내지 서브블록 11을 포함하며, 블록 3은 서브블록 12 내지 서브블록 15를 포함한다. 후보 수퍼블록은 블록 0 내지 블록 3을 포함한다. 예를 들어, 서브블록, 블록 및 수퍼블록의 크기는, 각각, 4x4, 8x8 및 16x16이다. 또는, 크기는, 각각, 8x8, 16x16 및 32x32이거나, 각각, 16x16, 32x32 및 64x64이다.
인코더는 서브블록들 각각에 대한 해시 값 - 서브블록 0에 대한 hashsub-block_0, 서브블록 1에 대한 hashsub-block_1 등 - 을 계산한다. 주어진 서브블록에 대한 해시 값이 서브블록의 샘플 값들(구현에 따라, 원래의 샘플 값들 또는 재구성된 샘플 값들)로부터 또는 서브블록의 행들 또는 열들의 중간 해시 값들로부터 계산될 수 있다. 주어진 서브블록 자체는 해시 기반 블록 매칭을 위한 후보 블록일 수 있거나, 가장 작은 후보 블록보다 더 작은 블록일 수 있다. 도 19b에 도시된 바와 같이, 인코더는 서브블록들에 대한 해시 값들을, 서브블록들 각각에 대한 해시 값을 갖는 엔트리를 포함하는, 1차원 어레이(1910)로서 그룹화하거나, 서브블록들에 대한 해시 값들을 해시 테이블에 다른 방식으로 저장할 수 있다.
서브블록 0 내지 서브블록 3을 포함하는 후보 블록(블록 0)에 대해, 인코더는 서브블록 0 내지 서브블록 3에 대한 4 개의 해시 값들을 해싱하는 것에 의해 해시 값 hashblock_0을 계산한다. 이와 유사하게, 인코더는 후보 블록 1 내지 후보 블록 3에 대한 해시 값들 hashblock_1, hashblock_2 및 hashblock_3을 그 각자의 서브블록들의 해시 값들로부터 계산한다. 인코더는 후보 블록들에 대한 해시 값들을, 후보 블록들 각각에 대한 해시 값을 갖는 엔트리를 포함하는, 1차원 어레이(1920)로서 그룹화하거나, 후보 블록들에 대한 해시 값들을 해시 테이블에 다른 방식으로 저장할 수 있다. 이러한 방식으로, 인코더는 서브블록들에 대한 해시 값들을 재사용할 수 있고, 이는 해시 테이블 구성의 계산 복잡도를 상당히 감소시킬 수 있는데, 그 이유는 인코더가 후보 블록들의 샘플 값들로부터 해시 값들을 계산할 필요가 없기 때문이다.
이와 유사하게, 블록 0 내지 블록 3을 포함하는 후보 수퍼블록에 대해, 인코더는 블록 0 내지 블록 3에 대한 4 개의 해시 값들을 해싱하는 것에 의해 해시 값 hashsuper-block_0을 계산한다. 인코더는, 보다 큰 후보 블록에 대한 해시 값들을 계산하는데 사용하기 위해, 후보 수퍼블록에 대한 해시 값을 1차원 어레이(1930) 또는 해시 테이블에 추가할 수 있다.
대안적으로, 인코더는 후보 수퍼블록에 대한 해시 값을 서브블록들의 해시 값들로부터 직접 계산할 수 있다. 예를 들어, 인코더는 32x32 블록의 16 개의 8x8 블록들의 해시 값들을 해싱하는 것에 의해 32x32 블록에 대한 해시 값을 계산한다. 또는, 다른 예로서, 인코더는 64x64 블록의 64 개의 8x8 블록들의 해시 값들을 해싱하는 것에 의해 64x64 블록에 대한 해시 값을 계산한다. 보다 일반적으로, 후보 블록에 대한 해시 값이 후보 블록 내의 보다 작은 블록들의 해시 값들을 해싱하는 것에 의해 계산될 수 있고, 여기서 보다 작은 블록들은 후보 블록의 폭의 1/2, 1/4, 1/8 또는 어떤 다른 분수인 폭을 가지며 그리고/또는 후보 블록의 높이의 1/2, 1/4, 1/8 또는 어떤 다른 분수인 높이를 가진다. 정사각형 블록에 대한 해시 값이 정사각형이거나 직사각형인 서브블록들의 해시 값들로부터 계산될 수 있다. 직사각형 블록에 대한 해시 값이 정사각형이거나 직사각형인 서브블록들의 해시 값들로부터 계산될 수 있다.
도 20은 계층적 해싱에 의한 해시 테이블 구성에 대한 기법(2000)을 나타낸 것이다. 도 3, 도 5a 및 도 5b 또는 도 6a 및 도 6b를 참조하여 기술된 것과 같은 이미지 인코더 또는 비디오 인코더는 기법(2000)을 수행할 수 있다.
다수의 후보 블록들 각각에 대해, 인코더는 블록 해시 값을 결정한다(2010). 예를 들어, 인코더는 후보 블록의 섹션들(예컨대, 행, 열, 서브블록)에 대한 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 블록 해시 값을 결정한다. 이 경우에, 주어진 후보 블록에 대해, 인코더는 후보 블록의 각자의 섹션들에 대한 중간 해시 값들을 찾고, 중간 해시 값들로부터 블록 해시 값을 결정하며, 다른 후보 블록들에 대한 블록 해시 값들을 계산하는데 재사용하기 위해 중간 해시 값들 중 적어도 일부를 유지할 수 있다. 또는, 인코더는 후보 블록의 샘플 값들로부터 후보 블록에 대한 블록 해시 값을 결정한다. 인코더는 다수의 후보 블록들에 대한 블록 해시 값들을 하나 이상의 해시 테이블들에 추가한다(2020).
다수의 후보 블록들 중 적어도 일부가 후보 수퍼블록들로서 구성된다. 다수의 후보 수퍼블록들 각각에 대해, 인코더는, 후보 수퍼블록의 블록들에 대한 블록 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 수퍼블록 해시 값을 결정한다(2030). 인코더는 다수의 후보 수퍼블록들에 대한 수퍼블록 해시 값들을 해시 테이블(들)에 추가한다(2040). 예를 들어, 해시 테이블(들)은 다수의 후보 블록들에 대한 블록 해시 값들을 저장하는 제1 해시 테이블 및 다수의 후보 수퍼블록들에 대한 수퍼블록 해시 값들을 저장하는 제2 해시 테이블을 포함한다. 2 개의 해시 테이블들은 개별적인 데이터 구조들 또는 단일의 데이터 구조의 상이한 섹션들일 수 있다. (상이한 크기의 후보 블록들에 대한 해시 테이블로서 사용될 수 있는 단일의 통합된 데이터 구조의 예들에 대해서는 섹션 VII.C 및 VII.J를 참조)
구현에 따라, 블록 해시 값들과 수퍼블록 해시 값들이 원래의 샘플 값들 또는 재구성된 샘플 값들을 사용하여 계산될 수 있다.
인코더는 BV 추정 또는 움직임 추정 동안 해시 기반 블록 매칭을 위해 도 20에 도시된 바와 같이 구성된 하나 이상의 해시 테이블들을 사용할 수 있다. BV 추정 또는 움직임 추정을 위해, 현재 블록(또는 수퍼블록)에 대한 해시 값이 해시 테이블(들)에서의 해시 값들과 동일한 해싱 접근법을 사용하여 결정된다.
예를 들어, BV 추정을 위해, 현재 픽처는 다수의 후보 블록들 및 다수의 후보 수퍼블록을 포함한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하고, 이어서 현재 블록의 블록 해시 값과 매칭되는 블록 해시 값을 갖는 (현재 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 적절한 해시 테이블을 검색한다. 또는, 인코더는 현재 픽처의 현재 수퍼블록에 대한 수퍼블록 해시 값을 결정하고, 이어서 현재 수퍼블록의 수퍼블록 해시 값과 매칭되는 수퍼블록 해시 값을 갖는 (현재 픽처의) 다수의 후보 수퍼블록들 중 임의의 후보 수퍼블록을 식별하기 위해 적절한 해시 테이블을 검색한다.
또는, 움직임 추정을 위해, 참조 픽처는 다수의 후보 블록들 및 다수의 후보 수퍼블록을 포함한다. 인코더는 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하고, 이어서 현재 블록의 블록 해시 값과 매칭되는 블록 해시 값을 갖는 (참조 픽처의) 다수의 후보 블록들 중 임의의 후보 블록을 식별하기 위해 적절한 해시 테이블을 검색한다. 또는, 인코더는 현재 픽처의 현재 수퍼블록에 대한 수퍼블록 해시 값을 결정하고, 이어서 현재 수퍼블록의 수퍼블록 해시 값과 매칭되는 수퍼블록 해시 값을 갖는 (참조 픽처의) 다수의 후보 수퍼블록들 중 임의의 후보 수퍼블록을 식별하기 위해 적절한 해시 테이블을 검색한다.
G. 해시 테이블 구성 동안 후보 블록의 걸러내기.
큰 픽처에 대해, 해시 테이블은 수백만 개의 후보 블록들에 대한 블록 해시 값들을 포함할 수 있다. 4x4, 16x16, 32x32 및 64x64와 같은 다수의 블록 크기들에 대한 블록 해시 값들이 포함되는 경우, 해시 테이블(들)은 훨씬 더 많은 해시 값들을 포함할 수 있다. 많은 경우에, 이러한 큰 해시 테이블들의 메모리 비용은 용납할 수 없다. 큰 해시 테이블과 연관된 2차적인 문제는 현재 블록에 대한 해시 값과 매칭되는 해시 값을 갖는 후보 블록들의 리스트가 아주 길 수 있다는 것이다. 매칭 블록 해시 값을 갖는 후보 블록들 중에서 실제(true) 매칭 블록을 식별하기 위해, 인코더는 후보 블록들 중 다수에 대해 샘플 방식 블록 매칭 동작들을 수행할 필요가 있을 수 있다. 이 제2 검색 스테이지는 아주 많은 시간이 걸릴 수 있다.
해시 테이블의 크기를 감소시키기 위해, 인코더는, 앞서 기술된 바와 같이(섹션 VII.C를 참조), 똑같은 해시 값들을 제거할 수 있지만, 이것이 행해질 때 압축 효율에서의 성능 저하(performance penalty)가 있을 수 있다.
해시 테이블의 크기를 감소시키기 위한 다른 옵션은 특정 패턴들을 갖는 후보 블록들을 걸러내는 것이다. 상세하게는, 인코더는 균일한 샘플 값, 균일한 샘플 값들의 행 또는 균일한 샘플 값들의 열과 같은 아주 간단한 패턴들을 갖는 후보 블록들을 걸러낼 수 있다. 이러한 패턴을 갖는 대부분의 블록이, 인트라 BC 예측 없이, 인트라 공간 예측을 사용하여 효율적으로 예측될 수 있다. 해시 테이블의 크기를 감소시키는 것에 부가하여, 이것은 임의의 주어진 블록 해시 값과 연관된 후보 블록들의 개수를 크게 감소시킬 수 있고, 이는 매칭 블록 해시 값을 갖는 후보 블록들 중에서의 시간이 많이 걸리는 2차적인 검색 동작들을 회피하는데 도움을 준다.
도 21a 내지 도 21c는 후보 블록에 대한 블록 해시 값이 해시 테이블에 추가되기 전에 해시 테이블 구성 동안 인코더가 걸러낼 수 있는 후보 블록들의 패턴들을 나타낸 것이다. 도 21a는 균일한 샘플 값들을 갖는 블록(2100)을 나타낸 것이다. 도 21b는 행들 각각이 균일한 샘플 값들을 갖는 블록(2110)을 나타낸 것이지만, 값들이 행마다 상이할 수 있다. 도 21c는 열들 각각이 균일한 샘플 값들을 갖는 블록(2120)을 나타낸 것이지만, 값들이 열마다 상이할 수 있다. 예를 들어, 이 패턴의 후보 블록들을 걸러내기 위해, 인코더는 후보 블록의 각각의 행 또는 각각의 열이 균일한 샘플 값들을 갖는지를 검사할 수 있다. 그러한 경우, 어떤 블록 해시 값도 후보 블록에 대한 해시 테이블에 추가되지 않는다.
도 22는 해시 테이블 구성 동안 복잡도 기준을 사용하여 후보 블록들을 걸러내는 기법(2200)을 나타낸 것이다. 도 3, 도 5a 및 도 5b 또는 도 6a 및 도 6b를 참조하여 기술된 것과 같은 이미지 인코더 또는 비디오 인코더는 기법(2200)을 수행할 수 있다.
인코더는 다음 후보 블록을 가져오고(2210), 후보 블록이 복잡도 기준을 충족시키는지의 여부를 평가한다(2220). 예를 들어, 일부 예시적인 구현에서, (a) 주어진 후보 블록의 적어도 하나의 행이 불균일한 샘플 값들을 갖는 경우 그리고/또는 (b) 주어진 후보 블록의 적어도 하나의 열이 불균일한 샘플 값들을 갖는 경우, 복잡도 기준이 충족된다. 또는, 보다 일반적으로, 인코더는 후보 블록에 대한 복잡도 메트릭을 계산하고, 이어서 복잡도 메트릭을 문턱값과 비교할 수 있다. 예를 들어, 복잡도 메트릭은 주파수 변환(예컨대, DCT) 후에 후보 블록에 대한 0이 아닌(non-zero) 수평 위치 및/또는 0이 아닌 수직 위치에서의 0이 아닌 AC 계수들의 개수이고, 문턱값은 0이다. 후보 블록에 대한 AC 계수들의 상단 행 및 AC 계수들의 좌측 열 밖에 임의의 0이 아닌 AC 계수들이 있는 경우 복잡도 기준이 충족된다. 대안적으로, 인코더는 다른 복잡도 메트릭을 고려한다. 복잡도 기준은, 적어도 부분적으로, 후보 블록의 섹션들(예컨대, 행들, 열들, 서브블록들)의 해시 값들을 비교하는 것에 의해 평가될 수 있다.
후보 블록이 복잡도 기준을 충족시키는 경우, 인코더는 후보 블록에 대한 블록 해시 값을 결정하고(2230) 블록 해시 값을 해시 테이블에 추가한다(2240). 블록 해시 값은, 중간 해시 값들이 계산되고 유지되는 접근법(섹션 VII.E를 참조) 및/또는 계층적 해싱을 사용하는 접근법(섹션 VII.F를 참조)을 비롯한, 임의의 해싱 접근법을 사용하여 결정될 수 있다. 해시 테이블은 앞서 기술된 바와 같이 구성된 데이터 구조(섹션 VII.C를 참조) 또는 다른 데이터 구조일 수 있다. 그렇지 않은 경우(후보 블록이 복잡도 기준을 충족시키지 않는 경우), 후보 블록에 대한 어떤 블록 해시 값도 해시 테이블에 추가되지 않는다.
인코더는 다음 후보 블록을 계속할지의 여부를 결정(2250)한다. 그러한 경우, 인코더는 다음 후보 블록을 가져오는 것(2210) 및 다음 후보 블록이 복잡도 기준을 충족시키는지의 여부를 평가하는 것(2220)을 계속한다. 이러한 방식으로, 인코더는 다수의 후보 블록들에 대한 블록 해시 값들을, 각자의 후보 블록들이 복잡도 기준을 충족시키는지의 여부에 따라, 선택적으로 결정할 수 있다.
구현에 따라, 해시 테이블 내의 블록 해시 값들이 원래의 샘플 값들 또는 재구성된 샘플 값들을 사용하여 계산될 수 있다. 인코더는, 앞서 기술된 바와 같이(예컨대, 섹션 VII.E 및 섹션 VII.F를 참조), BV 추정 또는 움직임 추정 동안 해시 기반 블록 매칭을 위해 도 22에 도시된 바와 같이 구성된 해시 테이블을 사용할 수 있다.
H. 해시 기반 블록 매칭 동안의 이용가능성 검사.
인코더가 BV 추정 동안 해시 기반 블록 매칭을 사용할 때, 해시 테이블은 현재 픽처의 원래의 샘플 값들로부터 계산되는, 현재 픽처 전체에 걸친 후보 블록들에 대한 블록 해시 값들을 포함할 수 있다. 이 경우에, 현재 픽처의 현재 블록에 대한 블록 해시 값이 현재 픽처의 나중의 섹션에서의 후보 블록에 대한 블록 해시 값과 매칭될 수 있다. 그렇지만, 현재 블록에 대한 참조 영역은, 참조 영역이 디코딩 동안 이용가능하도록 하기 위해, 현재 픽처의 이전에 인코딩되고 재구성된 섹션의 일부이어야만 한다. 이와 같이, 인코더는 해시 기반 블록 매칭 동안 블록 이용가능성을 검사한다. 후보 블록이 현재 블록에 대한 블록 해시 값과 매칭되는 블록 해시 값을 가질 때, 인코더는 후보 블록이 현재 블록에 대한 참조 영역으로서 사용하기 위해 이용가능한지의 여부를 검사한다.
도 23은, 예시적인 구현에서, BV 추정 동안 후보 블록이 참조 영역으로 되기 위한 조건을 나타내고 있다. 도 23에서, 현재 픽처(2310)는 점선으로 분리되어 있는 4 개의 타일들 - 타일 0 내지 타일 3 - 을 포함한다. 현재 픽처(2310)는 도 23에서의 파선에서, 슬라이스 0 내지 슬라이스 3을 비롯한, 다수의 슬라이스들로 파티셔닝된다. 슬라이스는 하나의 타일의 블록들 중 일부를 포함하거나 정수 개의 타일들의 블록들을 포함할 수 있다. 이와 같이, 하나의 타일은 다수의 슬라이스들을 포함할 수 있거나(예컨대, 타일 0은 슬라이스 0과 슬라이스 1을 포함함), 슬라이스와 타일이 공존할 수 있거나(예컨대, 타일 1과 슬라이스 2), 슬라이스가 다수의 타일들을 포함할 수 있다(예컨대, 슬라이스 3이 타일 2와 타일 3을 포함함). 적어도 동일한 타일 및 동일한 슬라이스 내에 있는, 현재 블록(2330) 이전의 블록들은, 도 23에서 실선에 의해 픽처(2310)의 나머지와 분리되어 있는, 이전에 인코딩되고 재구성된 콘텐츠(2312)의 일부이다. 인트라 BC 예측을 위해, 참조 영역은 재구성된 콘텐츠(2312)의 일부이다. (일부 구현들에서, 참조 영역은 또한 현재 블록(2330)과 부분적으로 중복될 수 있다.) BV 추정을 위한 해시 기반 블록 매칭 동안, 후보 블록이 현재 블록(2330)에 대한 블록 해시 값과 매칭되는 블록 해시 값을 가질 때, 인코더는 후보 블록과 현재 블록(2330)이 동일한 슬라이스의 일부 및 동일한 타일의 일부인지를 검사한다. 예를 들어, 도 23에 도시된 현재 블록(2330)에 대해, 인코더는 후보 블록이 슬라이스 1과 타일 0의 일부인지를 검사한다. 인코더는 또한 후보 블록이 코딩 순서(디코딩 순서라고도 불리움)에서 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함하는지를 검사한다. 예를 들어, 도 23에 도시된 현재 블록(2330)에 대해, 인코더는 후보 블록이 재구성된 콘텐츠(2312) 내의 샘플 값들만을 포함하는지를 검사한다.
H.265/HEVC 인코딩에 대한 예시적인 구현에서, 인코더는 후보 블록 및 현재 블록에 대해 다음과 같이 이용가능성을 검사할 수 있다. 현재 블록의 좌측 상단 코너의 x 및 y 위치는, 각각, xpositioncurrent_block, ypositioncurrent_block이고, 이는 현재 픽처의 좌측 상단 코어에 대한 오프셋을 나타낸다. 현재 블록(그리고 해시 기반 블록 매칭에서의 후보 블록)의 폭 및 높이는, 각각, widthblock 및 heightblock이다. 현재 픽처에서의 후보 블록의 좌측 상단 코너는 xpositioncandidate_block, ypositioncandidate_block이다. CTU 크기는 sizeCTU이다. 이하의 2 가지 조건 둘 다가 충족되는 경우, 후보 블록이 참조 영역으로서 사용하기 위해 이용가능하다.
첫 번째 조건. 현재 블록과 후보 블록이 동일한 슬라이스의 일부 및 동일한 타일의 일부이다. 보다 형식적으로는, 이 조건은 2 개의 부분 (a)와 (b)를 가지며, 이들 둘 다가 충족되어야만 한다. 부분 (a) - 현재 블록의 좌측 상단 코너(xpositioncurrent_block, ypositioncurrent_block)와 후보 블록의 좌측 상단 코너(xpositioncandidate_block, ypositioncandidate_block)가 동일한 슬라이스의 일부 및 동일한 타일의 일부이다. 부분 (b) - 현재 블록의 좌측 상단 코너(xpositioncurrent_block, ypositioncurrent_block)와 후보 블록의 우측 하단 코너(xpositioncandidate_block + widthblock - 1, ypositioncandidate_block + heightblock - 1)가 동일한 슬라이스의 일부 및 동일한 타일의 일부이다.
두 번째 조건. 후보 블록이 코딩 순서에서 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함한다. 보다 형식적으로는, 이 조건은 3 개의 부분 (c), (d) 와 (e)를 가지며, 이들 중 하나가 충족되어야만 한다. 즉, 두 번째 조건은 (c) 또는 (d) 또는 (e)가 충족되는 경우 충족된다. 이 조건들은 현재 블록 및 후보 블록에 대한 CTU 정렬에 의존한다.
부분 (c) - 후보 블록의 하단 위치에 대한 수직 CTU 위치가 현재 블록의 상단 위치에 대한 수직 CTU 위치보다 위에 있다. 예를 들어, (ypositioncandidate_block + heightblock - 1) / sizeCTU < ypositioncurrent_block / sizeCTU이다.
부분 (d) - 후보 블록의 하단 위치에 대한 수직 CTU 위치가 현재 블록의 상단 위치에 대한 수직 CTU 위치와 같고, 후보 블록의 우측 위치에 대한 수평 CTU 위치가 현재 블록의 좌측 위치에 대한 수평 CTU 위치의 좌측에 있다. 예를 들어, (ypositioncandidate_block + heightblock - 1) / sizeCTU == ypositioncurrent_block / sizeCTU AND (xpositioncandidate_block + widthblock - 1) / sizeCTU < xpositioncurrent_block / sizeCTU이다.
부분 (e) - 후보 블록의 하단 위치에 대한 수직 CTU 위치가 현재 블록의 상단 위치에 대한 수직 CTU 위치와 같고, 후보 블록의 우측 위치에 대한 수평 CTU 위치가 현재 블록의 좌측 위치에 대한 수평 CTU 위치와 같으며, 후보 블록의 우측 하단 코너 위치에 대한 z-스캔 순서가 후보 블록의 좌측 상단 코너 위치에 대한 z-스캔 순서보다 더 낮다. 예를 들어, (ypositioncandidate_block + heightblock - 1) / sizeCTU == ypositioncurrent_block / sizeCTU AND (xpositioncandidate_block + widthblock - 1) / sizeCTU == xpositioncurrent_block / sizeCTU일 때, 위치(xpositioncandidate_block + widthblock -1, ypositioncandidate_block + heightblock - 1)의 z-스캔 순서는 위치(xpositioncurrent_block, ypositioncurrent_block)의 z-스캔 순서보다 더 작다.
일반적으로, z-스캔 순서는 픽처를 파티셔닝하는 블록들의 순차적으로 명시된 순서를 따른다. 도 24는 현재 블록(2430) 및 후보 블록의 우측 하단 위치를 포함할 수 있는 블록들에 대한 예시적인 z-스캔 순서(2400)를 나타낸 것이다. z-스캔 순서는 일반적으로, 행에서 좌에서 우로 순차적으로 블록들에 할당되고, 상단부터 하단까지 연속적인 행들에서 반복한다. 블록이 분할될 때, z-스캔 순서는 분할된 블록 내에서 재귀적으로 할당된다. HEVC 표준에 대한 인코딩/디코딩의 구현의 경우에, z-스캔 순서는 (CTB 행에서 좌에서 우로, 상단부터 하단까지 연속적인 CTB 행들에서 반복함) CTB 래스터 스캔 패턴에 의해 CTB에서 CTB로 진행한다. CTB가 분할되는 경우, z-스캔 순서는 분할된 CTB 내에서 쿼드트리(quadtree)의 CB들에 대한 래스터 스캔 패턴을 따른다. 그리고, CB가 (예컨대, 다수의 CB들로 또는 다수의 PB들로) 분할되는 경우, z-스캔 순서는 분할된 CB 내에서 블록들에 대한 래스터 스캔 패턴을 따른다.
도 25는 BV 추정 동안 블록 이용가능성 검사를 위한 기법(2500)을 나타낸 것이다. 도 3, 도 5a 및 도 5b 또는 도 6a 및 도 6b를 참조하여 기술된 것과 같은 이미지 인코더 또는 비디오 인코더는 기법(2500)을 수행할 수 있다.
인코더는 현재 픽처의 다음 블록(현재 블록)을 가져오고(2510), 현재 블록에 대한 블록 해시 값을 결정한다(2520). 블록 해시 값이 임의의 해싱 접근법을 사용하여 결정될 수 있다. 일반적으로, 현재 블록에 대한 블록 해시 값이 해시 기반 블록 매칭을 위해 사용되는 해시 테이블에서의 블록 해시 값들과 동일한 해싱 접근법을 사용하여 결정된다. 해시 테이블 내의 현재 블록에 대한 블록 해시 값들이 원래의 샘플 값들을 사용하여 결정된다.
인코더는 현재 블록의 블록 해시 값과 매칭되는 블록 해시 값을 갖는 현재 픽처의 임의의 후보 블록들을 식별하기 위해 해시 테이블을 검색한다(2530). 현재 블록에 대한 블록 해시 값과 매칭되는 블록 해시 값을 갖는 (후보 블록들 중의) 임의의 주어진 후보 블록에 대해, 인코더는 인트라 BC 예측에서 현재 블록에 대한 참조 영역으로서 사용하기 위한 주어진 후보 블록의 이용가능성을 검사한다(2540). 예를 들어, 인코더는 주어진 후보 블록이 코딩 순서에서 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함하는지를 검사할 수 있다. 인코더는 또한 주어진 후보 블록 및 현재 블록이 동일한 블록 세트의 일부(예컨대, 동일한 슬라이스의 일부 및 동일한 타일의 일부, 동일한 CTU의 일부, 또는 현재 CTU 및 그의 좌측에 있는 CTU와 같은 특정의 CTU 세트의 일부)인지를 검사할 수 있다.
인코더는 다음 블록을 계속할지의 여부를 결정(2550)한다. 그러한 경우, 인코더는 다음 블록을 가져오는 것(2510) 및 다음 블록에 대한 블록 해시 값을 결정하는 것(2520)을 계속한다. 이러한 방식으로, 인코더는, 인트라 BC 예측을 위한 참조 영역들로서 후보 블록들의 이용가능성을 검사하는 빠른 동작들에 의해, 현재 픽처의 다수의 블록들에 대해 BV 추정 동안 해시 기반 블록 매칭을 수행할 수 있다.
I. 블록들을 해시 값들로 표현하기.
일부 예시적인 구현에서, 현재 블록에 대한 매칭 블록의 BV 값을 송신하는 대신에, 인코더는 현재 블록을 표현하는 매칭 블록의 해시 값을 시그널링한다. 디코더는, 시그널링된 해시 값을 사용하여, 해시 값에 따라 후보 블록들을 구성하는 그 자신의 데이터 구조를 사용해 현재 블록을 재구성한다. 이 접근법에서, 디코더는, 예를 들어, 도 18, 도 20 또는 도 22를 참조하여 기술된 접근법들 중 하나를 사용하여, 후보 블록들을 구성하는 데이터 구조를 생성하고 업데이트한다. 현재 블록에 대한 시그널링된 해시 값을 사용하여, 디코더는 데이터 구조에서 적절한 블록을 찾고, 이어서 현재 블록에 대해 그 블록을 사용한다. 어떤 경우에, 해시 값을 시그널링하는 것은 BV 값을 시그널링하는 것보다 더 적은 비트를 소비한다.
이 접근법에서, 인코더 및 디코더는 재구성된 샘플 값들을 사용하여 후보 블록들에 대한 해시 값들을 결정하고, 따라서 해시 값들이 인코더 및 디코더에서 동일하다. 데이터 구조의 구성은 구현에 따라 다르다. 인코더는 비매칭 블록들을 반복적으로 필터링 제거하기 위해 현재 블록마다 다수의 해시 값들을 시그널링할 수 있다. 또는, 인코더는 현재 블록마다 단일의 해시 값을 시그널링할 수 있다. 또는, 하나 이상의 해시 값들에 부가하여, 인코더는 다수의 나머지 후보 블록들 중에서 매칭 블록을 나타내는 인덱스 값을 시그널링할 수 있다.
J. 예시적인 해시 함수.
해시 기반 블록 매칭(그리고/또는 해시 기반 블록 재구성; 섹션 VII.I를 참조)을 위해 사용되는 해시 함수는 구현에 따라 다르다.
해시 함수는 8 비트, 12 비트, 16 비트, 24 비트, 32 비트, 또는 어떤 다른 비트 수를 갖는 해시 값들을 생성할 수 있다. 해시 값이 보다 적은 수의 비트를 갖는 경우, 데이터 구조는 보다 적은 수의 카테고리를 포함하지만, 각각의 카테고리는 보다 많은 후보 블록들을 포함할 수 있다. 다른 한편으로, 보다 많은 비트를 갖는 해시 값들을 사용하는 것은 후보 블록들을 구성하는 데이터 구조의 크기를 증가시키는 경향이 있다. 해시 값이 보다 많은 수의 비트를 갖는 경우, 데이터 구조는 보다 많은 수의 카테고리를 포함하지만, 각각의 카테고리는 보다 적은 후보 블록들을 포함할 수 있다..
일부 예시적인 구현에서, 해시 기반 블록 매칭(그리고/또는 해시 기반 블록 재구성)에서 사용되는 해시 함수는 CRC(cyclic redundancy check) 함수 또는 CRC의 일부이다. CRC 함수는 빠르며 널리 구현되는데, 그 이유는 오류 검사 목적으로 흔히 사용되기 때문이다. CRC 함수는 유사한 입력 값들에 적용될 때 매우 상이한 해시 값들을 생성하는 경향이 있다. 즉, 블록의 샘플 값들을 약간 변경하는 것이 상이한 CRC 해시 값들을 가져올 수 있다. CRC 함수는 8 비트, 12 비트, 16 비트, 24 비트, 32 비트, 또는 어떤 다른 비트 수를 갖는 해시 값들을 생성할 수 있다.
해시 기반 블록 매칭을 위해 사용될 때, CRC 함수는 현재 블록과 정확하게 똑같은 매칭 블록을 찾는데 잘 동작한다. 그렇지만, CRC 함수는 전형적으로 현재 블록에 단지 비슷한 매칭 블록을 찾는 데는 도움이 되지 않는다.
다른 예시적인 구현에서, 해시 기반 블록 매칭(또는 해시 기반 블록 재구성)에서 사용되는 해시 함수는 암호화 해시 함수 또는 그의 일부이다. 예를 들어, 해시 값은 MD5 값, SHA 값, MD5 값 일부 또는 SHA 값의 일부일 수 있다.
다른 예시적인 구현에서, 해시 기반 블록 매칭(또는 해시 기반 블록 재구성)에서 사용되는 해시 함수는 후보 블록 또는 현재 블록의 서명(signature)을 결정하기 위해 평균 및 XOR 연산을 사용한다. 해시 값은 블록의 평균에 기반한 성분 및 방향 XOR 연산(directional XOR operation)에 기반하여 하나 이상의 성분들을 포함한다.
예를 들어, 8-비트 샘플 값들을 갖는 8x8 블록 B[i,j]에 대해, 해시 값은 3 개의 8-비트 성분들을 갖는 24-비트 값이다. 첫 번째 8-비트 성분은 블록에서의 샘플 값들의 평균 μ이다.
Figure 112016095892093-pct00001
두 번째 8-비트 성분 및 세 번째 8-비트 성분에 대해, 샘플 값들의 레벨 맵(level map) L[i,j]가 블록에 대한 평균 값 μ를 사용하여 도출된다.
Figure 112016095892093-pct00002
두 번째 8-비트 성분 r은 레벨 맵 L[i,j]의 행들을 따른 XOR 연산들에 기반한다. 레벨 맵 L[i,j]의 각각의 행 0 ≤j < 8 에 대해, 두 번째 성분의 비트 r[j]가 결정된다.
Figure 112016095892093-pct00003
여기서
Figure 112016095892093-pct00004
는 XOR 연산을 나타낸다.
세 번째 8-비트 성분 c는 레벨 맵 L[i,j]의 열들을 따른 XOR 연산들에 기반한다. 레벨 맵 L[i,j]의 각각의 열 0 ≤i < 8 에 대해, 세 번째 성분의 비트 c[i]가 결정된다.
Figure 112016095892093-pct00005
이와 같이, 두 번째 성분 r에 대해, j 번째 비트는 j 번째 행의 레벨 맵의 XOR이다. 그리고, 세 번째 성분 c에 대해, i 번째 비트는 i 번째 열의 레벨 맵의 XOR이다. 24-비트 해시 값은 (μ << 16) + (r << 8) + c이고, 여기서 <<는 좌측 시프트 연산을 나타낸다.
이 해시 함수에 대해, (XOR 연산에 기반한) 두 번째 성분 및 세 번째 성분은 샘플 값들의 작은 변동에 민감하다. 해시 기반 블록 매칭을 위해 사용될 때, 그렇지만, 평균 및 XOR 연산에 기반한 해시 함수들은 현재 블록과 정확하게 똑같은 매칭 블록을 찾는데 잘 동작한다.
8x8 블록 대신에, 평균 및 XOR 연산을 사용하는 해시 함수는 상이한 크기의 블록에 대해, 예컨대, 8-비트 성분 r 또는 c를 결정하기 위해 16x16 블록에 대한 행들의 쌍 또는 열들의 쌍을 따라 XOR 연산을 계산하는 데, 8-비트 성분 r 또는 c를 결정하기 위해 32x32 블록에 대한 4 개의 행들 또는 4 개의 열들의 그룹들을 따라 XOR 연산을 계산하는 데, 기타에서 사용될 수 있다. 대안적으로, 평균 및 XOR 연산을 사용하는 해시 함수는 상이한 비트 수를 갖는 해시 값을 생성할 수 있다.
다른 예시적인 구현에서, 해시 기반 블록 매칭(또는 해시 기반 블록 재구성)에서 사용되는 해시 함수는 LSH(locality-sensitive hash) 함수이다. LSH(locality-sensitive hash) 함수는 유사한 입력 값들에 적용될 때 동일한 해시 값을 생성하는 경향이 있다. 즉, 블록의 샘플 값들을 약간 변경하는 것이 전형적으로 상이한 해시 값들을 가져오지는 않는다. LSH(locality-sensitive hash) 함수는 8 비트, 12 비트, 16 비트, 24 비트, 32 비트, 또는 어떤 다른 비트 수를 갖는 해시 값들을 생성할 수 있다.
예를 들어, 8x8 블록 B에 대해, 블록 B의 64 개의 샘플 값들로부터 64-차원 벡터
Figure 112016095892093-pct00006
가 발생된다. 다른 64-차원 벡터
Figure 112016095892093-pct00007
가 랜덤하게 발생된다. 해시 함수는 곱
Figure 112016095892093-pct00008
에 의존한다. 예를 들어, 해시 함수는
Figure 112016095892093-pct00009
일 수 있고, 여기서 d는 범위 0...drange로부터 선택되는 실수이다. 2 개의 블록이 유사한 경우, 그들의 벡터
Figure 112016095892093-pct00010
Figure 112016095892093-pct00011
가 유사하고, 그들의 해시 값
Figure 112016095892093-pct00012
Figure 112016095892093-pct00013
가 또한 동일하거나 유사해야만 한다.
일부 예시적인 구현에서, 해시 기반 블록 매칭(또는 해시 기반 블록 재구성)에서 사용되는 해시 함수는 블록 폭 및 블록 높이를 입력으로서 포함한다. 예를 들어, 해시 함수는, 해시 값이 입력으로서의 블록 높이 및 블록 폭에 부분적으로 의존하는, 수정된 CRC 함수, 수정된 암호화 해시 함수, 평균 및 XOR 연산을 사용하는 수정된 해시 함수, 또는 수정된 LSH(locality-sensitive hash) 함수일 수 있다. 해시 함수의 이 변형을 사용해, 상이한 크기(64x64, 32x32, 16x16 및 8x8 등)의 후보 블록들이 단일의 데이터 구조 내에 구성될 수 있다. 수정된 해시 함수는 n-비트 해시 함수을 생성할 수 있고, 그 중 m 비트는 기본 m-비트 해시 함수에 따른 해시 값을 나타낸다. n-비트 해시 값의 나머지 n-m 비트는 블록 크기를 나타낸다. 예를 들어, 수정된 해시 함수가 14-비트 해시 값을 생성하고, 처음 2 비트는 4 개의 옵션들에서의 블록 크기를 나타내고, 나머지 12 비트는 그 크기의 블록들에서의 해시 값을 나타내는 것으로 가정한다. 블록이 해싱되어, 0...4095 범위에 있는 12-비트 해시 값을 산출한다. 블록 크기가 4x4인 경우, 0<<12가 12-비트 해시 값에 부가된다. 블록 크기가 8x8인 경우, 1<<12가 12-비트 해시 값에 부가된다. 블록 크기가 16x16인 경우, 2<<12가 12-비트 해시 값에 부가된다. 그리고, 블록 크기가 32x32인 경우, 3<<12가 12-비트 해시 값에 부가된다. 이것은 0...16383 범위에 있는 14-비트 해시 값을 산출하며, 여기서 0...4095 범위에 있는 해시 값들은 4x4 블록에 대한 것이고, 4096...8191 범위에 있는 해시 값들은 8x8 블록에 대한 것이며, 8192...12287 범위에 있는 해시 값들은 16x16 블록에 대한 것이고, 12288...16383 범위에 있는 해시 값들은 32x32 블록에 대한 것이다. 보다 많은 블록 크기들이 가능한 경우, 블록의 블록 크기를 나타내기 위해 3, 4 또는 그 이상의 비트가 할당될 수 있다. 대안적으로, 블록 크기를 나타내는 n-m 비트는 n-비트 해시 값의 최하위 비트일 수 있고, 블록 크기에 대한 n-m 비트를 부가하기 전에 w-비트 값이 n-m 비트만큼 좌측으로 시프트된다.
대안적으로, 해시 함수가 상이한 크기의 블록들에 대해 동작하지만, 해시 함수가 블록의 크기에 관계없이 w-비트 해시 값을 생성한다. 상이한 블록 크기들의 후보 블록들이 단일의 데이터 구조 내에 여전히 구성될 수 있지만, 후보 블록에 대한 엔트리는 그 블록에 대한 블록 크기를 나타내는 정보를 포함한다. 현재 블록의 블록 크기와 비교하여, 후보 블록의 블록 크기를 검사하기 위해 해시 기반 블록 매칭 동안 블록 크기 정보가 사용될 수 있다.
대안적으로, 다른 해시 함수는 해시 기반 블록 매칭을 위해 사용된다.
K. 인트라 BC 예측 모드 - 구현 옵션.
인트라 BC 예측의 예측 모드를 갖는 블록은 CB, PB 또는 다른 블록일 수 있다. 블록이 CB일 때, 블록에 대한 BV 값은 CU 레벨에서 시그널링될 수 있다(그리고 CU 내의 다른 CB들은 동일한 BV 값 또는 그의 스케일링된 버전을 사용한다). 또는, 블록이 PB일 때, 블록에 대한 BV 값은 PU 레벨에서 시그널링될 수 있다(그리고 PU 내의 다른 PB들은 동일한 BV 값 또는 그의 스케일링된 버전을 사용한다). 보다 일반적으로, 인트라 BC 예측 블록에 대한 BV 값은 블록에 대한 적절한 구문 레벨에서 시그널링된다.
인트라 BC 예측 모드에 따른 예측의 블록 복사 동작은 CB(BV 값이 CB마다 시그널링될 때) 또는 PB(BV 값이 PB마다 시그널링될 때)의 레벨에서 수행될 수 있다. 예를 들어, 16x16 CB가 단일의 16x16 PB를 갖는 것으로 가정한다. 16x16 영역을 블록 복사하기 위해 (PB에 대한) BV 값이 적용된다. 대안적으로, PB 또는 CB에 대한 BV 값이 시그널링될 때에도, PB 또는 CB 내에서의 TB들 레벨에서 블록 복사 동작이 수행될 수 있다. 이러한 방식으로, TB에 대해 적용되는 BV 값이 동일한 PB 또는 CB에서의 다른 TB들의 위치를 참조할 수 있다.
일부 구현에서, 인트라 BC 예측된 CU에 대해, 크로마 데이터가 루마 데이터에 비해 감소된 분해능을 가질 때(예컨대, 포맷이 YUV 4:2:0 포맷일 때) 어쩌면 스케일링 및 반올림 후에, PU에서의 크로마 블록에 대한 인트라 BC 예측은 PU에서의 루마 블록에 대한 인트라 BC 예측과 동일한 BV 값을 사용한다. 대안적으로, PU의 루마 블록 및 크로마 블록들에 대해 상이한 BV 값들이 시그널링될 수 있다.
개시된 발명의 원리들이 적용될 수 있는 많은 가능한 실시예들을 바탕으로, 예시된 실시예들이 본 발명의 바람직한 예에 불과하고 본 발명의 범주를 제한하는 것으로서 해석되어서는 안된다는 것을 잘 알 것이다. 오히려, 본 발명의 범주는 이하의 청구범위에 의해 한정된다. 따라서, 이 청구범위의 범주 및 사상 내에 속하는 모든 것을 본 발명으로서 청구한다.

Claims (43)

  1. 컴퓨팅 디바이스에서의 방법에 있어서,
    복수의 후보(candidate) 블록들 중 주어진 후보 블록에 대한 블록 해시 값(hash value)을 결정하는 단계로서,
    상기 주어진 후보 블록의 복수의 섹션들 각각에 대해, 중간(intermediate) 해시 값을 찾는 단계;
    상기 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 상기 주어진 후보 블록에 대한 상기 블록 해시 값을 계산하는 단계; 및
    상기 복수의 후보 블록들 중 하나 이상의 다른 후보 블록에 대한 하나 이상의 다른 블록 해시 값을 계산하는데 재사용하기 위해 상기 중간 해시 값들 중 적어도 일부를 유지(retaining)하는 단계를 포함하는, 상기 블록 해시 값을 결정하는 단계; 및
    상기 주어진 후보 블록에 대한 상기 블록 해시 값을 해시 테이블에 추가하는 단계를 포함하는 방법.
  2. 제1항에 있어서, 상기 중간 해시 값을 찾는 단계는, 상기 복수의 섹션들의 주어진 섹션에 대해,
    상기 중간 해시 값이 상기 주어진 섹션에 대해 유지되는 경우, 상기 주어진 섹션에 대한 상기 중간 해시 값을 메모리로부터 판독하는 단계; 및
    그렇지 않은 경우, 상기 주어진 섹션에 대한 상기 중간 해시 값을 계산하는 단계를 포함하는 것인 방법.
  3. 제1항 또는 제2항에 있어서, 상기 주어진 후보 블록의 복수의 섹션들은 상기 주어진 후보 블록에서의 샘플 값들의 행들이고, 상기 중간 해시 값들 중 적어도 일부는 상기 주어진 후보 블록과 부분적으로 중복(overlap)되지만 정수 개의 샘플 값들만큼 수직으로 오프셋되어 있는 상기 복수의 후보 블록들 중 하나 이상에 대한 블록 해시 값들을 계산하는데 재사용되는 것인 방법.
  4. 제1항 또는 제2항에 있어서, 상기 복수의 후보 블록들에 대한 블록 해시 값들은, 단일의 샘플만큼 수직으로 오프셋되어 있는 수직으로 중복되는 후보 블록들의 블록 열에 대해 연속적으로(successively), 단일의 샘플만큼 수평으로 오프셋되어 있는 블록 열들에 대해 블록열마다 기반으로(block column-by-block column basis) 반복하여 결정되는 것인 방법.
  5. 제1항 또는 제2항에 있어서, 상기 주어진 후보 블록의 복수의 섹션들은 상기 주어진 후보 블록에서의 샘플 값들의 열들이고, 상기 중간 해시 값들 중 적어도 일부는 상기 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 샘플 값들만큼 수평으로 오프셋되어 있는 상기 복수의 후보 블록들 중 하나 이상에 대한 블록 해시 값들을 계산하는데 재사용되는 것인 방법.
  6. 제1항 또는 제2항에 있어서, 상기 복수의 후보 블록들에 대한 블록 해시 값들은, 단일의 샘플만큼 수평으로 오프셋되어 있는 수평으로 중복되는 후보 블록들의 블록 행에 대해 연속적으로, 단일의 샘플만큼 수직으로 오프셋되어 있는 블록 행들에 대해 블록행마다 기반으로(block row-by-block row basis) 반복하여 결정되는 것인 방법.
  7. 제1항 또는 제2항에 있어서, 상기 주어진 후보 블록의 복수의 섹션들은 상기 주어진 후보 블록에서의 샘플 값들의 서브블록(sub-block)들이고, 상기 중간 해시 값들 중 적어도 일부는 상기 주어진 후보 블록과 부분적으로 중복되지만 정수 개의 서브블록들만큼 오프셋되어 있는 상기 복수의 후보 블록들 중 하나 이상에 대한 블록 해시 값들을 계산하는데 재사용되는 것인 방법.
  8. 제7항에 있어서, 상기 서브블록들의 크기(size)는, 수직 또는 수평 중 적어도 하나로 이원 인자(dyadic factor)에 의해 상기 주어진 후보 블록의 크기에 관련되는 것인 방법.
  9. 제8항에 있어서, 상기 이원 인자는, 1/2, 1/4 및 1/8로 이루어진 그룹으로부터 선택되는 것인 방법.
  10. 제1항 또는 제2항에 있어서, 상기 중간 해시 값들은, 상기 복수의 섹션들에 대한 원래의(original) 샘플 값들을 사용하여 계산되는 것인 방법.
  11. 제1항 또는 제2항에 있어서, 상기 중간 해시 값들은, 상기 복수의 섹션들에 대한 재구성된 샘플 값들을 사용하여 계산되는 것인 방법.
  12. 제1항 또는 제2항에 있어서, 상기 주어진 후보 블록에 대한 상기 블록 해시 값 및 상기 중간 해시 값들은, 동일한 해시 함수를 사용하여 계산되는 것인 방법.
  13. 제1항 또는 제2항에 있어서, 현재 픽처(current picture)가 상기 복수의 후보 블록들을 포함하고, 상기 방법은,
    상기 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 상기 해시 테이블을 검색(searching)하는 단계를 더 포함하는 것인 방법.
  14. 제1항 또는 제2항에 있어서, 참조(reference) 픽처가 상기 복수의 후보 블록들을 포함하고, 상기 방법은,
    현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 상기 해시 테이블을 검색하는 단계를 더 포함하는 것인 방법.
  15. 제13항에 있어서, 상기 현재 블록에 대한 상기 블록 해시 값은, 상기 주어진 후보 블록에 대한 상기 블록 해시 값과 동일한 해싱 접근법을 사용하여 결정되는 것인 방법.
  16. 컴퓨팅 디바이스에서의 방법에 있어서,
    복수의 후보 블록들 각각에 대해, 블록 해시 값을 결정하는 단계 - 상기 복수의 후보 블록들 중 적어도 일부는 후보 수퍼블록(super-block)들로서 구성(organize)됨 - ;
    상기 복수의 후보 블록들에 대한 상기 블록 해시 값들을 하나 이상의 해시 테이블에 추가하는 단계;
    복수의 후보 수퍼블록들 각각에 대해, 상기 후보 수퍼블록의 후보 블록들에 대한 블록 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 수퍼블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 수퍼블록들에 대한 상기 수퍼블록 해시 값들을 상기 하나 이상의 해시 테이블에 추가하는 단계를 포함하는 방법.
  17. 제16항에 있어서, 상기 하나 이상의 해시 테이블은, 상기 복수의 후보 블록들에 대한 상기 블록 해시 값들을 저장하는 제1 해시 테이블 및 상기 복수의 후보 수퍼블록들에 대한 상기 수퍼블록 해시 값들을 저장하는 제2 해시 테이블을 포함하는 것인 방법.
  18. 제16항 또는 제17항에 있어서, 상기 복수의 후보 블록들 중 주어진 후보 블록에 대해, 상기 블록 해시 값을 결정하는 단계는,
    상기 주어진 후보 블록의 복수의 섹션들 각각에 대해, 중간 해시 값을 찾는 단계;
    상기 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 상기 주어진 후보 블록에 대한 상기 블록 해시 값을 계산하는 단계; 및
    상기 복수의 후보 블록들 중 다른 후보 블록들에 대한 다른 블록 해시 값들을 계산하는데 재사용하기 위해 상기 중간 해시 값들 중 적어도 일부를 유지하는 단계를 포함하는 것인 방법.
  19. 제16항 또는 제17항에 있어서, 상기 블록 해시 값들 및 상기 수퍼블록 해시 값들은, 원래의 샘플 값들을 사용하여 계산되는 것인 방법.
  20. 제16항 또는 제17항에 있어서, 상기 블록 해시 값들 및 상기 수퍼블록 해시 값들은, 재구성된 샘플 값들을 사용하여 계산되는 것인 방법.
  21. 제16항 또는 제17항에 있어서, 현재 픽처가 상기 복수의 후보 블록들을 포함하고, 상기 방법은,
    상기 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 상기 하나 이상의 해시 테이블 중 하나를 검색하는 단계를 더 포함하는 것인 방법.
  22. 제16항 또는 제17항에 있어서, 참조 픽처가 상기 복수의 후보 블록들을 포함하고, 상기 방법은,
    현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 상기 하나 이상의 해시 테이블 중 하나를 검색하는 단계를 더 포함하는 것인 방법.
  23. 제16항 또는 제17항에 있어서, 현재 픽처가 상기 복수의 후보 수퍼블록들을 포함하고, 상기 방법은,
    상기 현재 픽처의 현재 수퍼블록에 대한 수퍼블록 해시 값을 결정하는 단계; 및
    상기 현재 수퍼블록에 대한 상기 수퍼블록 해시 값과 매칭되는 수퍼블록 해시 값을 갖는 상기 복수의 후보 수퍼블록들 중 임의의 후보 수퍼블록을 식별하기 위해 상기 하나 이상의 해시 테이블 중 하나를 검색하는 단계를 더 포함하는 것인 방법.
  24. 제16항 또는 제17항에 있어서, 참조 픽처가 상기 복수의 후보 수퍼블록들을 포함하고, 상기 방법은,
    현재 픽처의 현재 수퍼블록에 대한 수퍼블록 해시 값을 결정하는 단계; 및
    상기 현재 수퍼블록에 대한 상기 수퍼블록 해시 값과 매칭되는 수퍼블록 해시 값을 갖는 상기 복수의 후보 수퍼블록들 중 임의의 후보 수퍼블록을 식별하기 위해 상기 하나 이상의 해시 테이블 중 하나를 검색하는 단계를 더 포함하는 것인 방법.
  25. 컴퓨팅 디바이스에서의 방법에 있어서,
    복수의 후보 블록들 각각에 대해,
    상기 후보 블록이 복잡도 기준(complexity criterion)을 충족시키는지의 여부를 평가(evaluating)하는 단계;
    상기 후보 블록이 상기 복잡도 기준을 충족시키는 경우, 상기 후보 블록에 대한 블록 해시 값을 결정하고 상기 블록 해시 값을 해시 테이블에 추가하는 단계를 포함하는 방법.
  26. 제25항에 있어서, 상기 복수의 후보 블록들 중 주어진 후보 블록에 대해, 상기 복잡도 기준은,
    상기 주어진 후보 블록의 적어도 하나의 행이 불균일한(non-uniform) 샘플 값들을 갖는 경우; 또는
    상기 주어진 후보 블록의 적어도 하나의 열이 불균일한 샘플 값들을 갖는 경우 중 적어도 한 경우에 충족되는 것인 방법.
  27. 제25항에 있어서, 상기 복수의 후보 블록들 중 주어진 후보 블록에 대해, 상기 후보 블록이 상기 복잡도 기준을 충족시키는지의 여부를 평가하는 단계는,
    상기 주어진 후보 블록에 대한 복잡도 메트릭(metric)을 계산하는 단계; 및
    상기 복잡도 메트릭을 문턱값과 비교하는 단계를 포함하는 것인 방법.
  28. 제27항에 있어서, 상기 복잡도 메트릭은 0이 아닌(non-zero) 수평 위치 또는 0이 아닌 수직 위치 중 적어도 한 위치에서의 0이 아닌 AC 계수(coefficient)들의 개수이고, 상기 문턱값은 0인 것인 방법.
  29. 제25항 내지 제28항 중 어느 한 항에 있어서, 상기 복수의 후보 블록들 중 주어진 후보 블록에 대해, 상기 블록 해시 값을 결정하는 단계는,
    상기 주어진 후보 블록의 복수의 섹션들 각각에 대해, 중간 해시 값을 찾는 단계;
    상기 중간 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 상기 주어진 후보 블록에 대한 상기 블록 해시 값을 계산하는 단계; 및
    상기 복수의 후보 블록들 중 다른 후보 블록들에 대한 다른 블록 해시 값들을 계산하는데 재사용하기 위해 상기 중간 해시 값들 중 적어도 일부를 유지하는 단계를 포함하는 것인 방법.
  30. 제25항 내지 제28항 중 어느 한 항에 있어서, 상기 복수의 후보 블록들 중 적어도 일부는 후보 수퍼블록들로서 구성되고, 상기 방법은,
    복수의 후보 수퍼블록들 각각에 대해, 상기 후보 수퍼블록의 후보 블록들에 대한 상기 블록 해시 값들을 해싱한 결과들에 적어도 부분적으로 기반하여 수퍼블록 해시 값을 결정하는 단계를 더 포함하는 것인 방법.
  31. 제25항 내지 제28항 중 어느 한 항에 있어서, 상기 해시 테이블에서의 상기 블록 해시 값들은, 원래의 샘플 값들을 사용하여 계산되는 것인 방법.
  32. 제25항 내지 제28항 중 어느 한 항에 있어서, 상기 해시 테이블에서의 상기 블록 해시 값들은, 재구성된 샘플 값들을 사용하여 계산되는 것인 방법.
  33. 제25항 내지 제28항 중 어느 한 항에 있어서, 현재 픽처가 상기 복수의 후보 블록들을 포함하고, 상기 방법은,
    상기 현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 상기 해시 테이블을 검색하는 단계를 더 포함하는 것인 방법.
  34. 제25항 내지 제28항 중 어느 한 항에 있어서, 참조 픽처가 상기 복수의 후보 블록들을 포함하고, 상기 방법은,
    현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 상기 해시 테이블을 검색하는 단계를 더 포함하는 것인 방법.
  35. 비디오 인코더 또는 이미지 인코더를 구현하는 컴퓨팅 디바이스에서의 방법에 있어서,
    현재 픽처의 현재 블록에 대한 블록 해시 값을 결정하는 단계;
    상기 현재 픽처의 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 후보 블록을 식별하기 위해 해시 테이블을 검색하는 단계; 및
    상기 복수의 후보 블록들 중 상기 현재 블록에 대한 상기 블록 해시 값과 매칭되는 블록 해시 값을 갖는 임의의 주어진 후보 블록에 대해, 인트라 블록 복사 예측에서 상기 현재 블록에 대한 참조 영역으로서 사용하기 위한 상기 주어진 후보 블록의 이용가능성을 검사(checking)하는 단계를 포함하는 방법.
  36. 제35항에 있어서, 상기 주어진 후보 블록의 이용가능성을 검사하는 단계는, 상기 주어진 후보 블록이 코딩 순서(order)에서 상기 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함하는지를 검사하는 단계를 포함하는 것인 방법.
  37. 제36항에 있어서, 상기 주어진 후보 블록이 코딩 순서에서 상기 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함하는지를 검사하는 단계는,
    (a) 상기 주어진 후보 블록의 하단 위치에 대한 수직 CTU(coding tree unit) 위치가 상기 현재 블록의 상단 위치에 대한 수직 CTU 위치보다 위에 있는 조건;
    (b) 상기 주어진 후보 블록의 하단 위치에 대한 상기 수직 CTU 위치가 상기 현재 블록의 상단 위치에 대한 상기 수직 CTU 위치와 같지만, 상기 주어진 후보 블록의 우측 위치에 대한 수평 CTU 위치가 상기 현재 블록의 좌측 위치에 대한 수평 CTU 위치의 좌측에 있는 조건; 및
    (c) 상기 주어진 후보 블록의 하단 위치에 대한 상기 수직 CTU 위치가 상기 현재 블록의 상단 위치에 대한 상기 수직 CTU 위치와 같고, 상기 주어진 후보 블록의 우측 위치에 대한 상기 수평 CTU 위치가 상기 현재 블록의 좌측 위치에 대한 상기 수평 CTU 위치와 같지만, 상기 주어진 후보 블록의 우측 하단 코너 위치에 대한 z-스캔(z-scan) 순서가 상기 주어진 후보 블록의 좌측 상단 코너 위치에 대한 z-스캔 순서보다 더 낮은 조건 중 하나의 조건이 충족되는지를 검사하는 단계를 포함하는 것인 방법.
  38. 제35항에 있어서, 상기 주어진 후보 블록의 이용가능성을 검사하는 단계는, 상기 주어진 후보 블록 및 상기 현재 블록이 동일한 세트의 블록들의 일부인지를 검사하는 단계를 포함하는 것인 방법.
  39. 제38항에 있어서, 상기 주어진 후보 블록과 상기 현재 블록이 동일한 슬라이스의 일부 및 동일한 타일의 일부인지를 검사하는 단계는,
    상기 주어진 후보 블록의 좌측 상단 코너 위치와 상기 현재 블록의 좌측 상단 코너 위치가 동일한 슬라이스의 일부 및 동일한 타일의 일부인지를 검사하는 단계; 및
    상기 주어진 후보 블록의 우측 하단 코너 위치와 상기 현재 블록의 좌측 상단 코너 위치가 동일한 슬라이스의 일부 및 동일한 타일의 일부인지를 검사하는 단계를 포함하는 것인 방법.
  40. 제35항에 있어서, 상기 주어진 후보 블록의 이용가능성을 검사하는 단계는,
    상기 주어진 후보 블록 및 상기 현재 블록이 동일한 세트의 블록들의 일부인지를 검사하는 단계; 및
    상기 주어진 후보 블록이 코딩 순서에서 상기 현재 블록에 선행하는 블록들에서의 샘플 값들만을 포함하는지를 검사하는 단계를 포함하는 것인 방법.
  41. 제35항 내지 제40항 중 어느 한 항에 있어서, 상기 현재 블록에 대한 상기 블록 해시 값은 상기 해시 테이블에서의 상기 블록 해시 값들과 동일한 해싱 접근법을 사용하여 결정되고, 상기 해시 테이블에서의 상기 블록 해시 값들은 원래의 샘플 값들을 사용하여 결정되는 것인 방법.
  42. 제1항, 제2항, 제16항, 제17항, 제25항, 제26항, 제27항, 제28항, 제35항, 제36항, 제37항, 제38항, 제39항 또는 제40항 중 어느 한 항의 방법을 수행하도록 적용된 컴퓨팅 디바이스.
  43. 제1항, 제2항, 제16항, 제17항, 제25항, 제26항, 제27항, 제28항, 제35항, 제36항, 제37항, 제38항, 제39항 또는 제40항 중 어느 한 항의 방법을 수행하도록 컴퓨팅 디바이스를 프로그램하기 위한 컴퓨터 실행가능 명령어들을 저장하는 하나 이상의 컴퓨터 판독가능 저장 매체.
KR1020167027484A 2014-03-04 2014-03-04 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사 KR102185245B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/072827 WO2015131325A1 (en) 2014-03-04 2014-03-04 Hash table construction and availability checking for hash-based block matching

Publications (2)

Publication Number Publication Date
KR20160129083A KR20160129083A (ko) 2016-11-08
KR102185245B1 true KR102185245B1 (ko) 2020-12-01

Family

ID=54054339

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167027484A KR102185245B1 (ko) 2014-03-04 2014-03-04 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사

Country Status (5)

Country Link
US (1) US10567754B2 (ko)
EP (1) EP3114838B1 (ko)
KR (1) KR102185245B1 (ko)
CN (1) CN105393537B (ko)
WO (1) WO2015131325A1 (ko)

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9628792B2 (en) 2013-07-15 2017-04-18 Qualcomm Incorporated Cross-layer parallel processing and offset delay parameters for video coding
JP6359101B2 (ja) 2013-10-14 2018-07-18 マイクロソフト テクノロジー ライセンシング,エルエルシー ビデオ及び画像の符号化及び復号のためのイントラブロックコピー予測モードの特徴
US10506254B2 (en) 2013-10-14 2019-12-10 Microsoft Technology Licensing, Llc Features of base color index map mode for video and image coding and decoding
US11109036B2 (en) 2013-10-14 2021-08-31 Microsoft Technology Licensing, Llc Encoder-side options for intra block copy prediction mode for video and image coding
EP3061253A4 (en) 2013-10-25 2016-08-31 Microsoft Technology Licensing Llc PAIRING OF BLOCKS BY HASHING VIDEO AND IMAGE CODING
US11076171B2 (en) 2013-10-25 2021-07-27 Microsoft Technology Licensing, Llc Representing blocks with hash values in video and image coding and decoding
CN104754343B (zh) * 2013-12-27 2019-07-19 财团法人工业技术研究院 图像处理方法与系统、解码方法、编码器与解码器
TWI536811B (zh) * 2013-12-27 2016-06-01 財團法人工業技術研究院 影像處理方法與系統、解碼方法、編碼器與解碼器
KR102258427B1 (ko) 2014-01-03 2021-06-01 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 비디오 및 이미지 코딩/디코딩에서의 블록 벡터 예측
US10390034B2 (en) 2014-01-03 2019-08-20 Microsoft Technology Licensing, Llc Innovations in block vector prediction and estimation of reconstructed sample values within an overlap area
US11284103B2 (en) 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
WO2015131323A1 (en) 2014-03-04 2015-09-11 Microsoft Technology Licensing, Llc Block flipping and skip mode in intra block copy prediction
US10567754B2 (en) 2014-03-04 2020-02-18 Microsoft Technology Licensing, Llc Hash table construction and availability checking for hash-based block matching
US10368092B2 (en) 2014-03-04 2019-07-30 Microsoft Technology Licensing, Llc Encoder-side decisions for block flipping and skip mode in intra block copy prediction
US9715559B2 (en) 2014-03-17 2017-07-25 Qualcomm Incorporated Hash-based encoder search for intra block copy
US9817855B2 (en) * 2014-03-17 2017-11-14 SynerScope B.V. Method and system for determining a measure of overlap between data entries
US10136141B2 (en) * 2014-06-11 2018-11-20 Qualcomm Incorporated Determining quantization parameter (QP) values and delta QP values for palette coded blocks in video coding
EP4354856A2 (en) 2014-06-19 2024-04-17 Microsoft Technology Licensing, LLC Unified intra block copy and inter prediction modes
WO2015196322A1 (en) 2014-06-23 2015-12-30 Microsoft Technology Licensing, Llc Encoder decisions based on results of hash-based block matching
EP3389276B1 (en) 2014-09-30 2021-01-13 Microsoft Technology Licensing, LLC Hash-based encoder decisions for video coding
CA3171803A1 (en) 2014-09-30 2016-04-07 Microsoft Technology Licensing, Llc Rules for intra-picture prediction modes when wavefront parallel processing is enabled
US10091511B2 (en) * 2015-01-05 2018-10-02 Getgo, Inc. Efficient video block matching
WO2016123398A2 (en) 2015-01-29 2016-08-04 Vid Scale, Inc. Intra-block copy searching
US10659783B2 (en) 2015-06-09 2020-05-19 Microsoft Technology Licensing, Llc Robust encoding/decoding of escape-coded pixels in palette mode
US9875552B1 (en) * 2016-07-26 2018-01-23 Teradici Corporation Content independent method of motion determination using sparse matrices
US10390039B2 (en) 2016-08-31 2019-08-20 Microsoft Technology Licensing, Llc Motion estimation for screen remoting scenarios
US11095877B2 (en) * 2016-11-30 2021-08-17 Microsoft Technology Licensing, Llc Local hash-based motion estimation for screen remoting scenarios
US10630978B2 (en) * 2017-05-12 2020-04-21 Blackberry Limited Methods and devices for intra-coding in video compression
CN107396112B (zh) * 2017-08-01 2021-03-09 深信服科技股份有限公司 一种编码方法及装置、计算机装置、可读存储介质
US10986349B2 (en) 2017-12-29 2021-04-20 Microsoft Technology Licensing, Llc Constraints on locations of reference blocks for intra block copy prediction
US10997066B2 (en) * 2018-02-20 2021-05-04 Samsung Electronics Co., Ltd. Storage devices that support cached physical address verification and methods of operating same
US10516885B1 (en) * 2018-07-11 2019-12-24 Tencent America LLC Method and apparatus for video coding
CN113170112B (zh) * 2018-11-22 2024-05-10 北京字节跳动网络技术有限公司 用于具有几何分割的帧间预测的构建方法
WO2020135465A1 (en) 2018-12-28 2020-07-02 Beijing Bytedance Network Technology Co., Ltd. Modified history based motion prediction
CN113196774B (zh) * 2019-01-02 2023-02-17 北京字节跳动网络技术有限公司 基于散列的运动搜索的早期确定
CN113615202A (zh) * 2019-01-28 2021-11-05 北京达佳互联信息技术有限公司 用于屏幕内容编解码的帧内预测的方法和装置
CN113366844B (zh) 2019-02-02 2023-10-03 北京字节跳动网络技术有限公司 用于视频编解码中的帧内块复制的缓冲区中的数据存储
CN113383543A (zh) 2019-02-02 2021-09-10 北京字节跳动网络技术有限公司 使用用于视频编解码中的帧内块复制的额外缓冲区样点的预测
EP3915265A4 (en) 2019-03-01 2022-06-22 Beijing Bytedance Network Technology Co., Ltd. DIRECTION-BASED PREDICTION FOR INTRA BLOCK COPY IN VIDEO CODING
JP7284284B2 (ja) 2019-03-04 2023-05-30 北京字節跳動網絡技術有限公司 映像符号化におけるイントラブロックコピーの実装形態の態様
WO2020185964A1 (en) * 2019-03-11 2020-09-17 Beijing Dajia Internet Information Technology Co., Ltd. Intra block copy for screen content coding
WO2020234376A1 (en) * 2019-05-22 2020-11-26 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Encoder and decoder, encoding method and decoding method for drift-free padding and hashing of independent coding regions
CN112118451B (zh) * 2019-06-20 2022-09-27 杭州海康威视数字技术股份有限公司 一种编解码方法、装置及其设备
AU2020309663C1 (en) 2019-07-06 2023-12-14 Beijing Bytedance Network Technology Co., Ltd. Virtual prediction buffer for intra block copy in video coding
EP3764233A1 (en) * 2019-07-08 2021-01-13 Continental Teves AG & Co. OHG Method of identifying errors in or manipulations of data or software stored in a device
MX2022000110A (es) 2019-07-10 2022-02-10 Beijing Bytedance Network Tech Co Ltd Identificacion de muestras para la copia intra-bloque en codificacion de video.
JP2022539887A (ja) 2019-07-11 2022-09-13 北京字節跳動網絡技術有限公司 映像符号化におけるイントラブロックコピーのためのビットストリーム適合性の制約
US11930159B2 (en) * 2019-11-29 2024-03-12 Intel Corporation Method and system of video coding with intra block copying
CN111403005B (zh) * 2020-03-11 2022-05-20 武汉联影医疗科技有限公司 医学影像数据采集方法、装置、计算机设备和存储介质
US11202085B1 (en) 2020-06-12 2021-12-14 Microsoft Technology Licensing, Llc Low-cost hash table construction and hash-based block matching for variable-size blocks
CN112004099B (zh) * 2020-07-30 2021-08-03 浙江大华技术股份有限公司 一种帧内块复制预测方法、装置及计算机可读存储介质
US11516477B2 (en) * 2021-02-11 2022-11-29 Qualcomm Incorporated Intra block copy scratch frame buffer

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130272394A1 (en) * 2012-04-12 2013-10-17 Activevideo Networks, Inc Graphical Application Integration with MPEG Objects

Family Cites Families (203)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2239538A (en) * 1939-03-30 1941-04-22 Zeiss Carl Fa Photographic teleobjective
US2718173A (en) * 1950-09-26 1955-09-20 Cycloptic Anstalt Fur Optik Un High intensity five component photographic objective
US3059528A (en) * 1957-07-02 1962-10-23 Allan Ted Panoramic motion picture camera
US3142236A (en) * 1961-03-08 1964-07-28 American Optical Corp Cameras and high speed optical system therefor
CH486707A (de) * 1968-06-14 1970-02-28 Voigtlaender Ag Lichtstarkes objektiv aus mindestens vier in Luft stehenden Gliedern vom erweiterten Triplet-typus
US5016980A (en) * 1985-11-12 1991-05-21 Waldron Robert D Systems for deviating and (optionally) converging radiation
US4918583A (en) * 1988-04-25 1990-04-17 Nikon Corporation Illuminating optical device
US5565921A (en) 1993-03-16 1996-10-15 Olympus Optical Co., Ltd. Motion-adaptive image signal processing system
US5610841A (en) 1993-09-30 1997-03-11 Matsushita Electric Industrial Co., Ltd. Video server
US5850312A (en) * 1993-10-22 1998-12-15 Olympus Optical Co., Ltd. Three-unit zoom lens
JP3580869B2 (ja) * 1994-09-13 2004-10-27 オリンパス株式会社 立体視内視鏡
US5613004A (en) * 1995-06-07 1997-03-18 The Dice Company Steganographic method and device
US5774271A (en) * 1996-07-29 1998-06-30 Welch Allyn, Inc. Lamp assembly
JP3869895B2 (ja) * 1996-12-27 2007-01-17 キヤノン株式会社 防振機能を有した光学系
US7206346B2 (en) 1997-06-25 2007-04-17 Nippon Telegraph And Telephone Corporation Motion vector predictive encoding method, motion vector decoding method, predictive encoding apparatus and decoding apparatus, and storage media storing motion vector predictive encoding and decoding programs
US6904110B2 (en) * 1997-07-31 2005-06-07 Francois Trans Channel equalization system and method
US6879266B1 (en) 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
JPH1166301A (ja) 1997-08-15 1999-03-09 Nippon Telegr & Teleph Corp <Ntt> カラー画像分類方法及び装置及びこの方法を記録した記録媒体
US6895048B2 (en) 1998-03-20 2005-05-17 International Business Machines Corporation Adaptive encoding of a sequence of still frames or partially still frames within motion video
US6332092B1 (en) * 1998-07-08 2001-12-18 Lifespex, Incorporated Optical probe having and methods for uniform light irradiation and/or light collection over a volume
US6487440B2 (en) * 1998-07-08 2002-11-26 Lifespex, Inc. Optical probe having and methods for difuse and uniform light irradiation
US6400764B1 (en) 1999-04-06 2002-06-04 Koninklijke Philips Electronics N. V. Motion estimation method featuring orthogonal-sum concurrent multi matching
US7216232B1 (en) * 1999-04-20 2007-05-08 Nec Corporation Method and device for inserting and authenticating a digital signature in digital data
US6785815B1 (en) * 1999-06-08 2004-08-31 Intertrust Technologies Corp. Methods and systems for encoding and protecting data using digital signature and watermarking techniques
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6671407B1 (en) 1999-10-19 2003-12-30 Microsoft Corporation System and method for hashing digital images
JP2001228401A (ja) * 2000-02-16 2001-08-24 Canon Inc 投影光学系、および該投影光学系による投影露光装置、デバイス製造方法
GB0006153D0 (en) 2000-03-14 2000-05-03 Inpharmatica Ltd Database
CA2304433A1 (en) 2000-04-05 2001-10-05 Cloakware Corporation General purpose access recovery scheme
GB2364459B (en) 2000-06-30 2004-03-31 Nokia Mobile Phones Ltd Video error resilience
US6915387B1 (en) * 2000-07-20 2005-07-05 Silicon Graphics, Inc. System and method for handling updates to memory in a distributed shared memory system
US6938128B1 (en) * 2000-07-20 2005-08-30 Silicon Graphics, Inc. System and method for reducing memory latency during read requests
US6765963B2 (en) * 2001-01-03 2004-07-20 Nokia Corporation Video decoder architecture and method for using same
US6920175B2 (en) * 2001-01-03 2005-07-19 Nokia Corporation Video coding architecture and methods for using same
GB2375673A (en) 2001-05-14 2002-11-20 Salgen Systems Ltd Image compression method using a table of hash values corresponding to motion vectors
KR20040024870A (ko) 2001-07-20 2004-03-22 그레이스노트 아이엔씨 음성 기록의 자동 확인
DE10158658A1 (de) 2001-11-30 2003-06-12 Bosch Gmbh Robert Verfahren zur gerichteten Prädiktion eines Bildblockes
US6819322B2 (en) 2002-01-04 2004-11-16 Hewlett-Packard Development Company, L.P. Method and apparatus for detecting potential lock-up conditions in a video graphics controller
KR100628489B1 (ko) 2002-01-18 2006-09-26 가부시끼가이샤 도시바 동화상 부호화방법 및 장치와 컴퓨터 독출가능 매체
US6894289B2 (en) * 2002-02-22 2005-05-17 Xenogen Corporation Fluorescence illumination assembly for an imaging apparatus
US6922246B2 (en) * 2002-02-22 2005-07-26 Xenogen Corporation Bottom fluorescence illumination assembly for an imaging apparatus
US6983020B2 (en) 2002-03-25 2006-01-03 Citrix Online Llc Method and apparatus for fast block motion detection
JP4151374B2 (ja) 2002-03-29 2008-09-17 セイコーエプソン株式会社 動画像符号化装置および動画像符号化方法
US7400774B2 (en) 2002-09-06 2008-07-15 The Regents Of The University Of California Encoding and decoding of digital data using cues derivable at a decoder
US20040174570A1 (en) 2002-12-02 2004-09-09 Plunkett Richard Thomas Variable size dither matrix usage
US20040201647A1 (en) * 2002-12-02 2004-10-14 Mark Jackson Pulver Stitching of integrated circuit components
US7792121B2 (en) * 2003-01-03 2010-09-07 Microsoft Corporation Frame protocol and scheduling system
JP4499370B2 (ja) * 2003-04-04 2010-07-07 オリンパス株式会社 結像光学系及びそれを用いた撮像装置
DE10316428A1 (de) * 2003-04-08 2004-10-21 Carl Zeiss Smt Ag Katadioptrisches Reduktionsobjektiv
HUP0301368A3 (en) * 2003-05-20 2005-09-28 Amt Advanced Multimedia Techno Method and equipment for compressing motion picture data
US8264489B2 (en) 2003-07-11 2012-09-11 Intel Corporation Interface remoting
US7609763B2 (en) 2003-07-18 2009-10-27 Microsoft Corporation Advanced bi-directional predictive coding of video frames
US20050060643A1 (en) 2003-08-25 2005-03-17 Miavia, Inc. Document similarity detection and classification system
US7349583B2 (en) 2003-09-05 2008-03-25 The Regents Of The University Of California Global motion estimation image coding and processing
CN1875242A (zh) * 2003-10-27 2006-12-06 通用医疗公司 用于使用频域干涉测量法进行光学成像的方法和设备
US20050105621A1 (en) 2003-11-04 2005-05-19 Ju Chi-Cheng Apparatus capable of performing both block-matching motion compensation and global motion compensation and method thereof
EP1542053B1 (fr) * 2003-12-11 2007-11-14 Tokendo Dispositif de métrologie pour sonde vidéoendoscopique
US20040133548A1 (en) 2003-12-15 2004-07-08 Alex Fielding Electronic Files Digital Rights Management.
US7095568B2 (en) * 2003-12-19 2006-08-22 Victor Company Of Japan, Limited Image display apparatus
KR100995398B1 (ko) 2004-01-20 2010-11-19 삼성전자주식회사 수직 및 수평 방향의 패턴을 고려한 전역 움직임 보상순차주사화 방법
WO2005116837A1 (en) * 2004-05-26 2005-12-08 Intel Corporation Automatic caching generation in network applications
US7672005B1 (en) * 2004-06-30 2010-03-02 Teradici Corporation Methods and apparatus for scan block caching
US20060062303A1 (en) 2004-09-17 2006-03-23 Sony Corporation Hybrid global motion estimator for video encoding
US7526607B1 (en) 2004-09-23 2009-04-28 Juniper Networks, Inc. Network acceleration and long-distance pattern detection using improved caching and disk mapping
AU2005295331A1 (en) 2004-10-15 2006-04-27 The Regents Of The University Of Colorado, A Body Corporate Revocable biometrics with robust distance metrics
JP2006265087A (ja) * 2004-12-13 2006-10-05 Ohara Inc 光学素子用プリフォーム
US20060153295A1 (en) * 2005-01-12 2006-07-13 Nokia Corporation Method and system for inter-layer prediction mode coding in scalable video coding
US20060224594A1 (en) * 2005-04-04 2006-10-05 Oracle International Corporation Methods and systems for identifying highly contended blocks in a database
CN100484233C (zh) 2005-06-03 2009-04-29 中国科学院研究生院 数字电视信号安全认证装置及带有该装置的电视设备
KR100716999B1 (ko) * 2005-06-03 2007-05-10 삼성전자주식회사 영상의 대칭성을 이용한 인트라 예측 방법, 이를 이용한영상의 복호화, 부호화 방법 및 장치
US20070025442A1 (en) 2005-07-28 2007-02-01 Sanyo Electric Co., Ltd. Coding method for coding moving images
US8107527B1 (en) 2005-07-28 2012-01-31 Teradici Corporation Progressive block encoding using region analysis
US8787460B1 (en) 2005-07-28 2014-07-22 Teradici Corporation Method and apparatus for motion vector estimation for an image sequence
KR101211665B1 (ko) 2005-08-12 2012-12-12 삼성전자주식회사 영상의 인트라 예측 부호화, 복호화 방법 및 장치
JP4815944B2 (ja) * 2005-08-19 2011-11-16 富士ゼロックス株式会社 ホログラム記録方法及び装置
JP2007066191A (ja) 2005-09-01 2007-03-15 Toshiba Corp 再生装置および再生方法
ATE504878T1 (de) * 2005-10-12 2011-04-15 Datacastle Corp Verfahren und system zur datensicherung
US7702127B2 (en) * 2005-10-21 2010-04-20 Microsoft Corporation Video fingerprinting using complexity-regularized video watermarking by statistics quantization
RU2298226C1 (ru) 2005-10-28 2007-04-27 Самсунг Электроникс Ко., Лтд. Способ улучшения цифровых изображений
GB2431798A (en) 2005-10-31 2007-05-02 Sony Uk Ltd Motion vector selection based on integrity
US7986844B2 (en) 2005-11-22 2011-07-26 Intel Corporation Optimized video compression using hashing function
US20070199011A1 (en) 2006-02-17 2007-08-23 Sony Corporation System and method for high quality AVC encoding
US20070217702A1 (en) 2006-03-14 2007-09-20 Sung Chih-Ta S Method and apparatus for decoding digital video stream
US7949186B2 (en) * 2006-03-15 2011-05-24 Massachusetts Institute Of Technology Pyramid match kernel and related techniques
KR100763917B1 (ko) * 2006-06-21 2007-10-05 삼성전자주식회사 고속으로 움직임을 추정하는 방법 및 장치
US7636824B1 (en) * 2006-06-28 2009-12-22 Acronis Inc. System and method for efficient backup using hashes
DE102006045565B3 (de) * 2006-08-04 2008-06-26 Leica Camera Ag Weitwinkel-Aufstecksucher an Messsucherkameras für fotografische Aufnahmen mit unterschiedlichen Brennweiten
US7747584B1 (en) * 2006-08-22 2010-06-29 Netapp, Inc. System and method for enabling de-duplication in a storage system architecture
US8099415B2 (en) * 2006-09-08 2012-01-17 Simply Hired, Inc. Method and apparatus for assessing similarity between online job listings
GB0618057D0 (en) * 2006-09-14 2006-10-25 Perkinelmer Ltd Improvements in and relating to scanning confocal microscopy
US8443398B2 (en) 2006-11-01 2013-05-14 Skyfire Labs, Inc. Architecture for delivery of video content responsive to remote interaction
US8320683B2 (en) * 2007-02-13 2012-11-27 Sharp Kabushiki Kaisha Image processing method, image processing apparatus, image reading apparatus, and image forming apparatus
US20080212687A1 (en) 2007-03-02 2008-09-04 Sony Corporation And Sony Electronics Inc. High accurate subspace extension of phase correlation for global motion estimation
US8494234B1 (en) 2007-03-07 2013-07-23 MotionDSP, Inc. Video hashing system and method
US8817878B2 (en) 2007-11-07 2014-08-26 Broadcom Corporation Method and system for motion estimation around a fixed reference vector using a pivot-pixel approach
KR101365444B1 (ko) * 2007-11-19 2014-02-21 삼성전자주식회사 영상의 해상도의 조정을 통하여 동영상을 효율적으로부호화/복호화하는 방법 및 장치
WO2009080132A1 (en) 2007-12-21 2009-07-02 Telefonaktiebolaget L M Ericsson (Publ) Improved pixel prediction for video coding
US8213515B2 (en) 2008-01-11 2012-07-03 Texas Instruments Incorporated Interpolated skip mode decision in video compression
KR101446771B1 (ko) * 2008-01-30 2014-10-06 삼성전자주식회사 영상 부호화장치 및 영상 복호화장치
WO2009102013A1 (ja) 2008-02-14 2009-08-20 Nec Corporation 移動ベクトル検出装置
JP2009230537A (ja) 2008-03-24 2009-10-08 Olympus Corp 画像処理装置、画像処理プログラム、画像処理方法、および、電子機器
US8295617B2 (en) 2008-05-19 2012-10-23 Citrix Systems, Inc. Systems and methods for enhanced image encoding
US8527482B2 (en) * 2008-06-06 2013-09-03 Chrysalis Storage, Llc Method for reducing redundancy between two or more datasets
GB2460844B (en) * 2008-06-10 2012-06-06 Half Minute Media Ltd Automatic detection of repeating video sequences
JP5126360B2 (ja) * 2008-06-30 2013-01-23 富士通セミコンダクター株式会社 メモリ装置及びそれを制御するメモリコントローラ
CN102144237B (zh) * 2008-07-03 2014-10-22 美国唯美安视国际有限公司 压缩媒体的有效水印方法
US9235577B2 (en) 2008-09-04 2016-01-12 Vmware, Inc. File transfer using standard blocks and standard-block identifiers
US8213503B2 (en) 2008-09-05 2012-07-03 Microsoft Corporation Skip modes for inter-layer residual video coding and decoding
CN102224734B (zh) * 2008-10-02 2013-11-13 索尼公司 图像处理设备和方法
US8670560B2 (en) * 2008-10-23 2014-03-11 University Of Ulster Encryption method
US20100119170A1 (en) 2008-11-07 2010-05-13 Yahoo! Inc. Image compression by comparison to large database
US20100166073A1 (en) 2008-12-31 2010-07-01 Advanced Micro Devices, Inc. Multiple-Candidate Motion Estimation With Advanced Spatial Filtering of Differential Motion Vectors
US8599929B2 (en) 2009-01-09 2013-12-03 Sungkyunkwan University Foundation For Corporate Collaboration Distributed video decoder and distributed video decoding method
WO2010086548A1 (fr) 2009-01-28 2010-08-05 France Telecom Procede et dispositif de codage d'une image, procede et dispositif de decodage, et programmes d'ordinateur correspondants
EP2392130A4 (en) 2009-02-02 2013-04-03 Calgary Scient Inc TRANSMISSION OF IMAGE DATA
CN102308579B (zh) * 2009-02-03 2017-06-06 汤姆森特许公司 位深可分级中使用平滑参考帧的运动补偿的方法和设备
US7868792B2 (en) 2009-02-05 2011-01-11 Polytechnic Institute Of New York University Generating a boundary hash-based hierarchical data structure associated with a plurality of known arbitrary-length bit strings and using the generated hierarchical data structure for detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit springs
US8838824B2 (en) * 2009-03-16 2014-09-16 Onmobile Global Limited Method and apparatus for delivery of adapted media
US8724707B2 (en) 2009-05-07 2014-05-13 Qualcomm Incorporated Video decoding using temporally constrained spatial dependency
US9113169B2 (en) 2009-05-07 2015-08-18 Qualcomm Incorporated Video encoding with temporally constrained spatial dependency for localized decoding
US8355585B2 (en) 2009-05-12 2013-01-15 Red Hat Israel, Ltd. Data compression of images using a shared dictionary
US8694547B2 (en) * 2009-07-07 2014-04-08 Palo Alto Research Center Incorporated System and method for dynamic state-space abstractions in external-memory and parallel graph search
JP2011024066A (ja) 2009-07-17 2011-02-03 Sony Corp 画像処理装置および方法
KR101712097B1 (ko) * 2009-08-19 2017-03-03 삼성전자 주식회사 유연한 직교 변환에 기초한 영상 부호화, 복호화 방법 및 장치
US8345750B2 (en) 2009-09-02 2013-01-01 Sony Computer Entertainment Inc. Scene change detection
US8411750B2 (en) 2009-10-30 2013-04-02 Qualcomm Incorporated Global motion parameter estimation using block-based motion vectors
US8633838B2 (en) 2010-01-15 2014-01-21 Neverfail Group Limited Method and apparatus for compression and network transport of data in support of continuous availability of applications
EP2526374A1 (en) * 2010-01-22 2012-11-28 Duke University Multiple window processing schemes for spectroscopic optical coherence tomography (oct) and fourier domain low coherence interferometry
CN103385002A (zh) * 2010-02-17 2013-11-06 韩国电子通信研究院 用于对超高清图像进行编码的装置及其方法、以及解码装置及其方法
US9237355B2 (en) 2010-02-19 2016-01-12 Qualcomm Incorporated Adaptive motion resolution for video coding
EP2365456B1 (en) * 2010-03-11 2016-07-20 CompuGroup Medical SE Data structure, method and system for predicting medical conditions
US8442942B2 (en) 2010-03-25 2013-05-14 Andrew C. Leppard Combining hash-based duplication with sub-block differencing to deduplicate data
US8619857B2 (en) 2010-04-09 2013-12-31 Sharp Laboratories Of America, Inc. Methods and systems for intra prediction
EP2559239A2 (en) 2010-04-13 2013-02-20 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Apparatus for intra predicting a block, apparatus for reconstructing a block of a picture, apparatus for reconstructing a block of a picture by intra prediction
WO2011127961A1 (en) 2010-04-13 2011-10-20 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e. V. Adaptive image filtering method and apparatus
KR20110123651A (ko) 2010-05-07 2011-11-15 한국전자통신연구원 생략 부호화를 이용한 영상 부호화 및 복호화 장치 및 그 방법
US9140888B2 (en) * 2010-06-01 2015-09-22 Hoya Corporation Objective lens for endoscope, and endoscope
US8417039B2 (en) 2010-06-03 2013-04-09 Microsoft Corporation Motion detection techniques for improved image remoting
CN101866366B (zh) 2010-07-15 2012-01-18 哈尔滨工业大学 一种基于内容的图像格式中文文档检索方法
GB2483294B (en) 2010-09-03 2013-01-02 Canon Kk Method and device for motion estimation of video data coded according to a scalable coding structure
US9256368B2 (en) * 2010-09-30 2016-02-09 Nec Corporation System and method for deduplication of distributed data
ES2955542T3 (es) 2010-11-04 2023-12-04 Ge Video Compression Llc Codificación de instantánea que soporta unión de bloques y modo de salto
WO2012072637A1 (en) * 2010-12-01 2012-06-07 Ibbt Method and device for correlation channel estimation
US20120170653A1 (en) * 2010-12-30 2012-07-05 General Instrument Corporation Block based sampling coding systems
KR20120095610A (ko) 2011-02-21 2012-08-29 삼성전자주식회사 다시점 비디오의 부호화 방법 및 장치, 그 복호화 방법 및 장치
CN103430549B (zh) 2011-03-18 2017-05-10 索尼公司 图像处理装置和图像处理方法
WO2012128242A1 (ja) 2011-03-18 2012-09-27 ソニー株式会社 画像処理装置、画像処理方法、及び、プログラム
US8480743B2 (en) * 2011-03-25 2013-07-09 Vicente Vanaclocha Vanaclocha Universal disc prosthesis
US8582886B2 (en) 2011-05-19 2013-11-12 Microsoft Corporation Compression of text contents for display remoting
CN103563374B (zh) 2011-05-27 2017-02-08 索尼公司 图像处理设备及方法
US9167020B2 (en) 2011-06-10 2015-10-20 Microsoft Technology Licensing, Llc Web-browser based desktop and application remoting solution
US8644620B1 (en) 2011-06-21 2014-02-04 Google Inc. Processing of matching regions in a stream of screen images
US11496760B2 (en) 2011-07-22 2022-11-08 Qualcomm Incorporated Slice header prediction for depth maps in three-dimensional video codecs
US9521418B2 (en) 2011-07-22 2016-12-13 Qualcomm Incorporated Slice header three-dimensional video extension for slice header prediction
JP5651560B2 (ja) 2011-09-07 2015-01-14 日本放送協会 動きベクトル予測装置、符号化装置、復号装置、及びこれらのプログラム
US10031636B2 (en) 2011-09-08 2018-07-24 Microsoft Technology Licensing, Llc Remoting desktop displays using move regions
US9351808B2 (en) * 2011-09-27 2016-05-31 Sharon M. E. McCarthy Apparatus for removing dental appliance and dental system
GB2495301B (en) 2011-09-30 2018-01-17 Advanced Risc Mach Ltd Method of and apparatus for encoding data
US9609217B2 (en) 2011-11-02 2017-03-28 Mediatek Inc. Image-based motion sensor and related multi-purpose camera system
US9332271B2 (en) 2011-11-03 2016-05-03 Cisco Technology, Inc. Utilizing a search scheme for screen content video coding
GB201119206D0 (en) 2011-11-07 2011-12-21 Canon Kk Method and device for providing compensation offsets for a set of reconstructed samples of an image
EP3739886A1 (en) 2011-11-18 2020-11-18 GE Video Compression, LLC Multi-view coding with efficient residual handling
KR101874100B1 (ko) 2011-12-02 2018-07-04 삼성전자주식회사 영상의 부호화 방법 및 장치, 그 복호화 방법 및 장치
US9262986B2 (en) * 2011-12-07 2016-02-16 Cisco Technology, Inc. Reference frame management for screen content video coding using hash or checksum functions
US9223534B1 (en) 2011-12-30 2015-12-29 hopTo Inc. Client side detection of motion vectors for cross-platform display
WO2013103376A1 (en) 2012-01-05 2013-07-11 Intel Corporation Device, system and method of video encoding
US9235313B2 (en) 2012-01-11 2016-01-12 Google Inc. Efficient motion estimation for remote desktop sharing
US9380320B2 (en) 2012-02-10 2016-06-28 Broadcom Corporation Frequency domain sample adaptive offset (SAO)
US20130258052A1 (en) 2012-03-28 2013-10-03 Qualcomm Incorporated Inter-view residual prediction in 3d video coding
US9154749B2 (en) * 2012-04-08 2015-10-06 Broadcom Corporation Power saving techniques for wireless delivery of video
US20130268621A1 (en) * 2012-04-08 2013-10-10 Broadcom Corporation Transmission of video utilizing static content information from video source
US9286862B2 (en) 2012-04-09 2016-03-15 Oracle International Corporation System and method for detecting a scrolling event during a client display update
US20130271565A1 (en) * 2012-04-16 2013-10-17 Qualcomm Incorporated View synthesis based on asymmetric texture and depth resolutions
AU2012202352A1 (en) 2012-04-20 2013-11-07 Canon Kabushiki Kaisha Method, system and apparatus for determining a hash code representing a portion of an image
US9549180B2 (en) 2012-04-20 2017-01-17 Qualcomm Incorporated Disparity vector generation for inter-view prediction for video coding
US10051264B2 (en) * 2012-04-20 2018-08-14 Qualcomm Incorporated Marking reference pictures in video sequences having broken link pictures
US9479776B2 (en) 2012-07-02 2016-10-25 Qualcomm Incorporated Signaling of long-term reference pictures for video coding
SG11201500129UA (en) * 2012-07-09 2015-02-27 Vid Scale Inc Codec architecture for multiple layer video coding
US9264713B2 (en) 2012-07-11 2016-02-16 Qualcomm Incorporated Rotation of prediction residual blocks in video coding with transform skipping
US9277237B2 (en) 2012-07-30 2016-03-01 Vmware, Inc. User interface remoting through video encoding techniques
US9467692B2 (en) 2012-08-31 2016-10-11 Qualcomm Incorporated Intra prediction improvements for scalable video coding
US9479782B2 (en) * 2012-09-28 2016-10-25 Qualcomm Incorporated Supplemental enhancement information message coding
CN103841426B (zh) 2012-10-08 2017-04-26 华为技术有限公司 用于运动矢量预测的运动矢量列表建立的方法、装置
US9225979B1 (en) 2013-01-30 2015-12-29 Google Inc. Remote access encoding
US11317123B2 (en) 2013-04-25 2022-04-26 Vmware, Inc. Systems and methods for using pre-calculated block hashes for image block matching
CN104142939B (zh) 2013-05-07 2019-07-02 杭州智棱科技有限公司 一种基于运动特征信息匹配特征码的方法与设备
CN103281538B (zh) 2013-06-06 2016-01-13 上海交通大学 基于滚动哈希和块级别帧内预测的帧内编码方法
US9210434B2 (en) 2013-06-12 2015-12-08 Microsoft Technology Licensing, Llc Screen map and standards-based progressive codec for screen content coding
US20140369413A1 (en) 2013-06-18 2014-12-18 Vmware, Inc. Systems and methods for compressing video data using image block matching
US10812694B2 (en) 2013-08-21 2020-10-20 Faro Technologies, Inc. Real-time inspection guidance of triangulation scanner
US20150063451A1 (en) 2013-09-05 2015-03-05 Microsoft Corporation Universal Screen Content Codec
JP6212345B2 (ja) 2013-10-02 2017-10-11 ルネサスエレクトロニクス株式会社 動画像符号化装置およびその動作方法
US11076171B2 (en) 2013-10-25 2021-07-27 Microsoft Technology Licensing, Llc Representing blocks with hash values in video and image coding and decoding
EP3061253A4 (en) 2013-10-25 2016-08-31 Microsoft Technology Licensing Llc PAIRING OF BLOCKS BY HASHING VIDEO AND IMAGE CODING
US10567754B2 (en) 2014-03-04 2020-02-18 Microsoft Technology Licensing, Llc Hash table construction and availability checking for hash-based block matching
US10368092B2 (en) 2014-03-04 2019-07-30 Microsoft Technology Licensing, Llc Encoder-side decisions for block flipping and skip mode in intra block copy prediction
US10136140B2 (en) 2014-03-17 2018-11-20 Microsoft Technology Licensing, Llc Encoder-side decisions for screen content encoding
WO2015196322A1 (en) 2014-06-23 2015-12-30 Microsoft Technology Licensing, Llc Encoder decisions based on results of hash-based block matching
CN106797458B (zh) 2014-07-31 2019-03-08 惠普发展公司,有限责任合伙企业 真实对象的虚拟改变
EP3389276B1 (en) 2014-09-30 2021-01-13 Microsoft Technology Licensing, LLC Hash-based encoder decisions for video coding
CN104574440A (zh) 2014-12-30 2015-04-29 安科智慧城市技术(中国)有限公司 一种视频运动目标跟踪方法及装置
US10390039B2 (en) 2016-08-31 2019-08-20 Microsoft Technology Licensing, Llc Motion estimation for screen remoting scenarios
US11095877B2 (en) 2016-11-30 2021-08-17 Microsoft Technology Licensing, Llc Local hash-based motion estimation for screen remoting scenarios

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130272394A1 (en) * 2012-04-12 2013-10-17 Activevideo Networks, Inc Graphical Application Integration with MPEG Objects

Also Published As

Publication number Publication date
KR20160129083A (ko) 2016-11-08
CN105393537A (zh) 2016-03-09
EP3114838A1 (en) 2017-01-11
CN105393537B (zh) 2019-08-27
EP3114838A4 (en) 2017-03-01
US20160277733A1 (en) 2016-09-22
WO2015131325A1 (en) 2015-09-11
US10567754B2 (en) 2020-02-18
EP3114838B1 (en) 2018-02-07

Similar Documents

Publication Publication Date Title
KR102185245B1 (ko) 해시 기반 블록 매칭을 위한 해시 테이블 구성 및 이용가능성 검사
JP6931690B2 (ja) コンテンツをエンコードする方法及び計算装置
US10136140B2 (en) Encoder-side decisions for screen content encoding
EP3114841B1 (en) Encoder-side decisions for block flipping and skip mode in intra block copy prediction
JP6462119B2 (ja) コンピューティングデバイス
KR102197505B1 (ko) 비디오 및 이미지 코딩 및 디코딩에서의 해시 값을 갖는 블록의 표현
AU2014385769B2 (en) Block flipping and skip mode in intra block copy prediction
US20200084472A1 (en) Features of base color index map mode for video and image coding and decoding
KR102258427B1 (ko) 비디오 및 이미지 코딩/디코딩에서의 블록 벡터 예측
US10264290B2 (en) Hash-based block matching in video and image coding
AU2014408228A1 (en) Rules for intra-picture prediction modes when wavefront parallel processing is enabled

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant