KR20210094054A - 데이터 어레이들의 비트 평면 인코딩 - Google Patents
데이터 어레이들의 비트 평면 인코딩 Download PDFInfo
- Publication number
- KR20210094054A KR20210094054A KR1020217020020A KR20217020020A KR20210094054A KR 20210094054 A KR20210094054 A KR 20210094054A KR 1020217020020 A KR1020217020020 A KR 1020217020020A KR 20217020020 A KR20217020020 A KR 20217020020A KR 20210094054 A KR20210094054 A KR 20210094054A
- Authority
- KR
- South Korea
- Prior art keywords
- bit
- bit plane
- array
- data
- data packet
- Prior art date
Links
- 238000003491 array Methods 0.000 title claims abstract description 60
- 238000000034 method Methods 0.000 claims abstract description 139
- 230000002441 reversible effect Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 6
- 230000001131 transforming effect Effects 0.000 abstract 1
- 238000012545 processing Methods 0.000 description 50
- 238000005516 engineering process Methods 0.000 description 24
- 230000008569 process Effects 0.000 description 24
- 230000015654 memory Effects 0.000 description 23
- 238000007906 compression Methods 0.000 description 16
- 230000006835 compression Effects 0.000 description 16
- 230000006870 function Effects 0.000 description 12
- 239000011159 matrix material Substances 0.000 description 12
- 230000009466 transformation Effects 0.000 description 10
- 239000000872 buffer Substances 0.000 description 9
- 238000004891 communication Methods 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 5
- 230000011664 signaling Effects 0.000 description 5
- 238000009877 rendering Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229910052709 silver Inorganic materials 0.000 description 1
- 239000004332 silver Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/30—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
- H04N19/34—Scalability techniques involving progressive bit-plane based encoding of the enhancement layer, e.g. fine granular scalability [FGS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/007—Transform coding, e.g. discrete cosine transform
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/40—Tree coding, e.g. quadtree, octree
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/132—Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/18—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a set of transform coefficients
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/46—Embedding additional information in the video signal during the compression process
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods 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/96—Tree coding, e.g. quad-tree coding
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Discrete Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
데이터 요소들의 어레이를 공간으로부터 주파수 도메인으로 변환하는 단계, 주파수 도메인 계수들을 복수의 비트 평면 어레이들로서 표현하는 단계, 및 데이터 패킷이 가득 찰 때까지, 최상위 비트를 표현하는 비트 평면 어레이로부터 아래쪽으로 작업하면서 비트 평면 시퀀스 내의 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 데이터 패킷으로서 주파수 도메인 계수들의 세트를 인코딩하는 단계를 포함하는, 데이터 요소들의 어레이를 인코딩하는 방법이 본 명세서에 개시된다. 각각의 비트 평면 어레이는, 개별적인 계수들까지 아래로 비트 평면 어레이를 각자의 섹션들 및 서브섹션들로 재귀적으로 세분하고, 이용가능한 공간이 있는 한, 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 (서브)섹션들의 위치들을 표시하는 데이터를 데이터 패킷 내에 포함시킴으로써 인코딩된다.
Description
본 명세서에 설명된 기술은 데이터 프로세싱 시스템 내에서, 예컨대, 메모리에 저장하기 위해 데이터를 인코딩하기 위한 방법 및 장치에 관한 것으로, 특히, 그래픽 프로세싱 시스템들 내에서 텍스처 또는 프레임 버퍼 데이터와 같은 이미지 데이터를 압축하고 저장하기 위한 방법들에 관한 것이다. 또한, 대응하는 디코딩 방법 및 장치가 설명되어 있다.
데이터 프로세싱 시스템들은 종종 생성된 이미지 데이터를 프레임 버퍼 내에 저장한다. 프레임 버퍼는 전형적으로, 예컨대, 디스플레이될 프레임(이미지) 내의 (예컨대) 픽셀들 각각에 대한, 예를 들어, 컬러 값들을 포함하는 그 프레임에 대한 데이터의 완전한 세트를 포함한다. 이어서, 적합한 디스플레이 드라이버가 프레임 버퍼의 콘텐츠(content)들을 판독하고, 그 안에 저장된 이미지 데이터를 사용하여 원하는 프레임(이미지)을 디스플레이하도록 디스플레이를 구동시킬 수 있다.
그러나, 프레임 버퍼 내의 이미지 데이터('프레임 버퍼 데이터')의 저장 및 액세스는, 예컨대, 데이터 프로세싱 시스템의 저장 및/또는 대역폭 자원에 대한 비교적 높은 요구사항들을 야기할 수 있다(또는 반대로 그러한 요구사항들이 충족되지 않을 때 성능을 감소시킬 수 있다). 따라서, 데이터 프로세싱 시스템에 부과되는 부담을 감소시키기 위해서는, 그러한 프레임 버퍼 데이터를 "압축된" 포맷으로 저장할 수 있는 것이 바람직하다. 이는, 예컨대, 프로세싱 자원들 및 전력이 상대적으로 제한될 수 있는 디지털 카메라들 또는 그러한 카메라들을 포함하는 모바일 디바이스들과 같은 휴대용 디바이스들의 데이터 프로세싱 장치에서 특히 바람직하다.
유사한 고려사항들이 소정 정보 조각의 저장 및/또는 송신에 필요한 데이터의 양을 감소시키는 것이 바람직한 다양한 다른 사례들에 적용된다. 또한 그래픽 프로세싱의 상황의 다른 예는, 예컨대, 생성되고 있는 렌더러(render) 출력의 각자의 샘플링 포지션(position)들(픽셀들) 상에 이어서 맵핑(mapping)될 수 있는 (컬러, 휘도, 등과 같은) 주어진 텍스처 데이터를 각각이 표현하는 텍스처 요소들(또는 '텍셀(texel)들')의 어레이의 형태로 텍스처 데이터를 저장할 때일 것이다. 또 다시, 이러한 텍스처 데이터의 저장 및 액세스는 데이터 프로세싱 시스템 상에서 비교적 높은 저장 및/또는 대역폭 요건들을 야기할 수 있다.
따라서, 대역폭 및 메모리 소비를 감소시키기 위해 데이터를 압축하도록, 이미지 데이터 값들의 어레이들과 같은 데이터 요소들의 어레이들을 인코딩하는 것이 일반적이다. 이를 위해, 다양한 데이터 압축 스킴(scheme)들이 개발되었다.
그러나, 본 출원인은 데이터를 인코딩(압축)하기 위한 더 효율적인 배열들에 대한 여지가 여전히 남아있다고 믿는다.
본 명세서에 설명된 기술의 다양한 실시예들이 이제 단지 예로서 그리고 첨부 도면들을 참조하여 설명될 것이다.
도 1은 본 명세서에 설명된 기술의 실시예들이 구현될 수 있는 데이터 프로세싱 시스템의 예를 계략적으로 도시한다.
도 2는 본 명세서에 설명된 기술의 실시예들에 따른 고정된 비율의 인코딩 프로세스를 개략적으로 예시한다.
도 3a는 본 명세서에 설명된 기술의 실시예들에 따른 인코딩을 위해, 예컨대 주파수 도메인 변환 후에 획득될 수 있는 바와 같은 데이터 값들의 전형적인 4 × 4 블록의 예를 도시하고, 도 3b는 데이터 값들의 이러한 블록이 이진 비트 평면들의 세트로 어떻게 분해될 수 있는지를 도시한다.
도 4는 본 명세서에 설명된 기술의 실시예에 따른 인코딩 프로세스의 개요를 예시하는 흐름도이다.
도 5는 본 명세서에 설명된 기술의 실시예들에 따라 비트 평면들의 시퀀스 내의 각각의 비트 평면 어레이가 어떻게 인코딩될 수 있는지를 예시한 흐름도이다.
도 6은 도 3b에 도시된 비트 평면 표현된 데이터 값들에 대한 본 명세서에 설명된 기술의 실시예들에 따른 인코딩의 예를 도시한다.
도 7은 본 명세서에 설명된 기술의 실시예에 따라 8 × 8 블록을 인코딩하는 예를 개략적으로 도시한다.
도 8은 본 명세서에 설명된 기술의 실시예에 따른 다중-평면 인코딩 프로세스를 개략적으로 예시한다.
도 9는 본 명세서에 설명된 기술의 실시예에 따른 인코딩 프로세스를 도시하는 흐름도이다.
도 10은 본 명세서에 설명된 기술의 실시예에 따른 디코딩 프로세스를 개략적으로 예시한다.
도 11은 본 명세서에 설명된 기술의 실시예에 따른 디코드 프로세스의 예를 예시한다.
도 12는 본 명세서에 설명된 기술의 실시예들에 따른 인코딩 스킴에 대한 무손실 확장의 예를 개략적으로 예시한다.
도 13은 손실 변환의 예를 도시한다.
도 14는 본 명세서에 설명된 기술의 실시예들과 함께 사용하기 위해 무손실 변환이 어떻게 달성될 수 있는지의 예를 개략적으로 도시한다.
도면들은 본 명세서에 설명된 기술의 실시예들과 관련된 데이터 프로세싱 장치들 및 시스템들의 요소들을 도시한다. 당업자에 의해 이해될 바와 같이, 도면들에 예시되지 않은 데이터 프로세싱 장치 및 시스템의 다른 요소들이 있을 수 있다. 여기서, 도면들은 단지 개략적이고, 예를 들어, 도시된 요소들이 도면에 별개의 요소들로서 개략적으로 도시되어 있다 하더라도, 실제로 그들은 중요한 하드웨어 회로들을 공유할 수 있다(또는, 반대로, 요소들이 중요한 하드웨어 회로들을 공유하는 것으로 도시되어 있는 경우, 이들은 실제로 별개의 요소들을 포함할 수 있다)는 것에 또한 유의해야 한다.
도 1은 본 명세서에 설명된 기술의 실시예들이 구현될 수 있는 데이터 프로세싱 시스템의 예를 계략적으로 도시한다.
도 2는 본 명세서에 설명된 기술의 실시예들에 따른 고정된 비율의 인코딩 프로세스를 개략적으로 예시한다.
도 3a는 본 명세서에 설명된 기술의 실시예들에 따른 인코딩을 위해, 예컨대 주파수 도메인 변환 후에 획득될 수 있는 바와 같은 데이터 값들의 전형적인 4 × 4 블록의 예를 도시하고, 도 3b는 데이터 값들의 이러한 블록이 이진 비트 평면들의 세트로 어떻게 분해될 수 있는지를 도시한다.
도 4는 본 명세서에 설명된 기술의 실시예에 따른 인코딩 프로세스의 개요를 예시하는 흐름도이다.
도 5는 본 명세서에 설명된 기술의 실시예들에 따라 비트 평면들의 시퀀스 내의 각각의 비트 평면 어레이가 어떻게 인코딩될 수 있는지를 예시한 흐름도이다.
도 6은 도 3b에 도시된 비트 평면 표현된 데이터 값들에 대한 본 명세서에 설명된 기술의 실시예들에 따른 인코딩의 예를 도시한다.
도 7은 본 명세서에 설명된 기술의 실시예에 따라 8 × 8 블록을 인코딩하는 예를 개략적으로 도시한다.
도 8은 본 명세서에 설명된 기술의 실시예에 따른 다중-평면 인코딩 프로세스를 개략적으로 예시한다.
도 9는 본 명세서에 설명된 기술의 실시예에 따른 인코딩 프로세스를 도시하는 흐름도이다.
도 10은 본 명세서에 설명된 기술의 실시예에 따른 디코딩 프로세스를 개략적으로 예시한다.
도 11은 본 명세서에 설명된 기술의 실시예에 따른 디코드 프로세스의 예를 예시한다.
도 12는 본 명세서에 설명된 기술의 실시예들에 따른 인코딩 스킴에 대한 무손실 확장의 예를 개략적으로 예시한다.
도 13은 손실 변환의 예를 도시한다.
도 14는 본 명세서에 설명된 기술의 실시예들과 함께 사용하기 위해 무손실 변환이 어떻게 달성될 수 있는지의 예를 개략적으로 도시한다.
도면들은 본 명세서에 설명된 기술의 실시예들과 관련된 데이터 프로세싱 장치들 및 시스템들의 요소들을 도시한다. 당업자에 의해 이해될 바와 같이, 도면들에 예시되지 않은 데이터 프로세싱 장치 및 시스템의 다른 요소들이 있을 수 있다. 여기서, 도면들은 단지 개략적이고, 예를 들어, 도시된 요소들이 도면에 별개의 요소들로서 개략적으로 도시되어 있다 하더라도, 실제로 그들은 중요한 하드웨어 회로들을 공유할 수 있다(또는, 반대로, 요소들이 중요한 하드웨어 회로들을 공유하는 것으로 도시되어 있는 경우, 이들은 실제로 별개의 요소들을 포함할 수 있다)는 것에 또한 유의해야 한다.
본 명세서에 설명된 기술의 제1 실시예는 값들의 공간 분포를 표현하는 데이터 요소들의 어레이를 인코딩하는 방법을 포함하며, 이 방법은,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하는 단계;
주파수 도메인 계수들의 세트를 복수의 비트 평면 어레이들로서 표현하는 단계 - 각각의 비트 평면 어레이는 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -; 및
데이터 패킷이 가득 찰 때까지, 최상위 비트(most significant bit, MSB)를 표현하는 비트 평면 어레이로부터 아래쪽으로 작업하면서 비트 평면 시퀀스 내의 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 데이터 패킷으로서 주파수 도메인 계수들의 세트를 인코딩하는 단계를 포함하고,
각각의 비트 평면 어레이는, 비트 평면 어레이를 각자의 섹션들로 세분하고, 데이터 패킷 내에 이용가능한 공간이 있다는 조건에 따라, 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치들을 표시하는 데이터를 데이터 패킷 내에 포함시킴으로써, 그리고 이어서, 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 계수(들)의 위치(들)가 표시될 때까지, 재귀적으로 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들뿐만 아니라 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들을 각자의 서브섹션들로 세분하고, 비트 평면 시퀀스 내의 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 임의의 서브섹션들의 위치들을 표시하는 데이터를 데이터 패킷 내에 포함시킴으로써, 인코딩된다.
본 명세서에 설명된 기술의 제2 실시예는 값들의 공간 분포를 표현하는 데이터 요소들의 어레이를 인코딩하기 위한 장치를 포함하고, 장치는 인코더를 포함하고, 인코더는,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하기 위한 변환 회로부;
주파수 도메인 계수들의 세트를 복수의 비트 평면 어레이들로서 표현하기 위한 비트 평면 코딩 회로부 - 각각의 비트 평면 어레이는 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -; 및
데이터 패킷이 가득 찰 때까지, 최상위 비트를 표현하는 비트 평면 어레이로부터 아래쪽으로 작업하면서 비트 평면 시퀀스 내의 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 데이터 패킷으로서 비트 평면 어레이 표현된 주파수 도메인 계수들의 세트를 인코딩하도록 구성된 인코딩 회로부를 포함하고,
인코딩 회로부는, 비트 평면 어레이를 각자의 섹션들로 세분하고, 데이터 패킷 내에 이용가능한 공간이 있다는 조건에 따라, 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치들을 표시하는 데이터를 데이터 패킷 내에 포함시킴으로써, 그리고 이어서, 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 계수(들)의 위치(들)가 표시될 때까지, 재귀적으로 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들뿐만 아니라 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들을 각자의 서브섹션들로 세분하고, 비트 평면 시퀀스 내의 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 임의의 서브섹션들의 위치들을 표시하는 데이터를 데이터 패킷 내에 포함시킴으로써, 각각의 비트 평면 어레이를 인코딩하도록 구성된다.
본 명세서에 설명된 기술에서, 이미지 데이터의 블록 등과 같은 데이터 요소들의 어레이를 인코딩할 때, 데이터 어레이의 공간 표현을 주파수 도메인으로 변환하기 위해 주파수 변환 오퍼레이션이 데이터 요소들의 어레이에 먼저 적용된다. 주파수 도메인 계수들은 부호-크기 포맷을 사용하여 저장될 수 있는데(그리고 일 실시예에서는, 저장되는데), 즉, 여기서, 부호 값을 표시하기 위해서는 단일 비트가 사용되고(예컨대, 포지티브(positive)에 대해서는 "1" 그리고 네거티브(negative)에 대해서는 "0", 또는 그 반대도 성립), 크기는 계수의 절대값이다(그리고 그에 따라서 최상위 비트는 또한 최고의 0이 아닌 비트임). 이어서, 비트 평면 코딩이 주파수 도메인 계수들에 대해 수행되어, 주파수 도메인 계수들에 대한 (절대) 크기 값들을 주파수 도메인 계수들 각각에 대한 각각의 비트 포지션에서의 각자의 (이진) 비트 값들을 포함하는 비트 평면 어레이들의 세트로 분해한다. 이어서, 비트 평면 표현된 데이터는, 데이터 패킷이 가득 찰 때까지, 비트들을 최상위 (상부) 비트 평면으로부터 고정된 크기의 데이터 패킷으로 아래쪽으로 패킹(packing)함으로써 인코딩된다.
따라서, 인코딩은 데이터 패킷이 가득 찰 때 중지된다. 이러한 방식으로, 원하는 고정된 크기를 갖는 데이터 패킷이 생성될 수 있는 것이 보장될 수 있다.
따라서, 본 명세서에 설명된 기술은, 이미지 데이터의 블록 등과 같은 데이터 요소들의 어레이가 고정된 크기의 데이터 패킷으로 인코딩(압축)될 수 있는 고정된 비율의 압축(고정된 비트 비율)을 제공할 수 있다.
자연스럽게, 본 명세서에 설명된 기술이 고정된 비트 비율로 코딩하기 때문에, (일단 고정된 크기의 데이터 패킷이 가득 차면, 임의의 나머지 비트들은 데이터 패킷 내에 포함되지 않으므로) 고정된 크기의 데이터 패킷으로의 압축은 본질적으로 '손실'이 있다. 그러나, 많은 응용예들의 경우, 일부 출력 (이미지) 충실도를 잃는 것이 허용가능하며, (본 명세서에 설명된 기술이 제공할 수 있는) 주어진 대역폭(비트 비율)을 보장할 수 있는 것이 더 바람직하다.
(대조적으로, 기존의 무손실 압축 포맷들이 평균 대역폭을 감소시킬 수 있지만, 생성된 데이터 패킷 크기들이 가변적이어서, 무손실 압축 포맷들은 고정된 비율의 압축을 보장할 수 없고, 따라서, 무손실 압축을 사용하는 메모리 시스템은 대체적으로 전형적인 대역폭이 더 낮더라도 '최악의 경우'의 대역폭을 제공할 것임이 분명하다.)
추가로, 본 명세서에 설명된 기술에서, 각각의 비트 평면 어레이 내의 정보는, 비트 평면 정보가 비트 평면 시퀀스 내의 이전 비트 평면들(계층들) 내의 정보에 기초하여 인코딩되는 상황 의존적 방식으로 인코딩된다. 이러한 방식으로, 정보는 특히 효율적인 방식으로 인코딩될 수 있다. 예를 들어, 전형적으로 더 높은 압축 품질을 달성하고자 하는 JPEG 또는 MPEG와 같은 다른 손실 압축 포맷들과는 대조적으로, 본 명세서에 설명된 기술은, 예컨대 더 높은 처리량을 용이하게 하기 위해 더 효율적인 압축을 제공할 수 있다. 이는 더 높은 대역폭, 예컨대, 미디어, 애플리케이션들에 특히 바람직할 수 있다.
특히, 비트 평면 정보를 인코딩하기 위해, 본 명세서에 설명된 기술은, 비트 평면 어레이를 각자의 섹션들(예컨대, 사분면들)로 세분하고, 어느 섹션(사분면)이 그 비트 평면의 새롭게 "활성인" 주파수 도메인 계수(즉, 비트 평면 시퀀스 내의 그의 제1의 0이 아닌 비트 값이 그 비트 평면 내에 나타난 주파수 도메인 계수)를 갖는지를 표시함으로써, 그리고 이어서 그 비트 평면 내의 새롭게 활성인 주파수 도메인 계수를 포함하는 임의의 섹션에 대해서 뿐만 아니라 비트 평면 시퀀스 내의 이전 (더 높은) 비트 평면의 인코딩 동안 (새롭게) 활성인 것으로 표시된 임의의 섹션들 또는 서브섹션들에 대해서, 해당 비트 평면 내의 개별적인 주파수 도메인 계수들의 위치들(즉, 비트 평면 어레이 내의 개별적인 계수들의 포지션들)까지 필요에 따라 아래로, 그들 섹션들을 추가의 서브섹션들로 세분하고, 이들 서브섹션(들) 중 어느 서브섹션이 그 비트 평면 내의 임의의 새롭게 활성인 계수들을 포함하는지를 표시함으로써, 등을 함으로써, 각각의 비트 평면에 나타난 계수들의 위치들을 재귀적으로 인코딩한다.
또한, 일 실시예에서, 각각의 연속적인 비트 평면의 인코딩은, 비트 평면 시퀀스 내의 선행 (더 높은) 비트 평면들(레벨들)에 대한 새롭게 활성인 섹션들의 위치들을 인코딩(표시)하여서, 예를 들어, 섹션이 더 높은 비트 평면 내에 새롭게 활성인 계수를 포함하는 것으로 이전에 표시되었다면, 아래의 다음 비트 평면에 대하여, 활성인 "서브섹션" 표시가 나머지(예컨대, 사분면들의 경우, 3개) "서브섹션들" 중 (있다면) 어느 서브섹션이 활성인 계수(즉, 주파수 도메인 계수에 대한 비트 평면 시퀀스 내의 제1의 0이 아닌 비트 값)를 "새롭게" 포함하는지를 표시하게 한다.
따라서, 주어진 비트 평면을 인코딩할 때, 그 비트 평면 내의 임의의 "새롭게 활성인" 섹션들, 즉, 그 섹션 내에 포함된 주파수 도메인 계수들 중 적어도 하나에 대해 0이 아닌 비트 값이 비트 평면 시퀀스에서 처음으로 그 비트 평면 내에서 나타난 그러한 섹션들이 표시된다. 그러나, 일단 섹션이 이러한 방식으로 활성이 되면("활성화되면"), 일 실시예에서, 그것은 비트 평면 시퀀스 내의 다음 (더 낮은) 비트 평면(및 비트 평면 시퀀스 내의 모든 후속 비트 평면들)의 인코딩 동안 "활성"으로 유지된다. 이어서, 현재 활성인 섹션들(즉, 현재 비트 평면 내의 새롭게 활성인 임의의 섹션들뿐만 아니라 비트 평면 시퀀스 내의 이전 비트 평면 내에서 새롭게 활성이었던 임의의 섹션들) 각각 내의, 임의의 새롭게 활성인 서브섹션들의 위치들, 및 궁극적으로는, 임의의 새롭게 활성인 계수들의 위치들이, 예컨대 후술된 바와 같이, 일 실시예에서 가변 길이 코딩 스킴을 사용하여, 특정 비트 평면의 인코딩 동안 인코딩될 수 있다.
따라서, 각각의 비트 평면의 인코딩은 비트 평면 시퀀스 내의 이전 비트 평면(계층)에 대하여 상황 의존적이다(그리고 이전 비트 평면에 관련된 변경들을 표시한다).
데이터 패킷 내에 여전히 이용가능한 공간이 있는 한, 일 실시예에서, 본 명세서에 설명된 기술은 이어서, 예를 들어, 인코딩되고 있는 비트 평면 어레이 내의 새롭게 활성인 계수들에 대한 부호 값들 및/또는 비트 평면 어레이에 대한 소위 "정밀(refinement) 비트 값들"을 표시하는 추가의 데이터를 데이터 패킷에 추가한다. ("정밀 비트 값들"은, 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 내에 나타났던 임의의 계수들에 대한 해당 비트 평면 내의 비트 값들, 즉, 그들 계수들에 대한 제1의 0이 아닌 비트 포지션에 뒤따르는 하위 비트(less significant bit) 포지션들에 대한 비트 값들을 표현한다. 따라서, 주어진 비트 평면 어레이에 대한 정밀 비트 값들은 비트 평면 시퀀스 내의 더 높은 비트 평면에서 이전에 "활성화된" 계수들에 대한 그 비트 평면 어레이 내의 비트 값들이다.) 일 실시예에서, 이들 부호 및 정밀 비트 값들은 비트 평면 어레이의 인코딩을 위해 데이터 패킷 내에 원시 코딩(raw coding)된다(그들의 실제 값들로서 포함됨).
이러한 방식으로, 적어도 고정된 데이터 패킷 크기에 도달할 때까지, 비트 평면 내의 (그리고 각각의 비트 평면들 내의) 비트들에 대한 위치들(및 일 실시예에서, 또한 부호 및 정밀 비트 값들)을 표시하는 코드가 생성될 수 있다.
본 출원인은 본 명세서에 설명된 기술이 특히 효율적인 고정된 비율의 압축 스킴을 제공할 수 있다고 믿는다. 예를 들어, 종종, 특히 데이터 요소들의 어레이가 이미지 데이터를 표현하는 경우, 주파수 도메인 계수들의 비트 평면 표현은 다수의 선두(leading) "0들"을 포함할 것이다. 인코딩되고 있는 각각의 비트 평면(계층)에 대해, 임의의 새롭게 활성인 섹션들이 시그널링되고 그것이 이어서 시그널링되는 이전에 인코딩된 비트 평면(들)(계층(들))에 대한 변경들인, 본 명세서에 설명된 기술의 방법들에 따라 비트 평면 어레이들을 인코딩함으로써, (예컨대, 비트 평면들이 소정의 순서로 스캔(scan)되어야 할 비교적 집약적인 산술 또는 런 길이(run length) 코딩 스킴들과는 대조적으로) 본 명세서에 설명된 기술은 이러한 정보를 더 높은 구현 효율로 압축할 수 있다.
데이터 요소들의 어레이(들)는 값들의 공간 분포를 표현한다. 즉, 데이터 요소들의 어레이(들)는 공간 도메인 내에 분포되는 데이터 값들의 세트를 표현한다. 따라서, 각각의 데이터 요소는 공간 분포 내의 소정 포지션에서의 데이터 값을 표현할 수 있다. 따라서, 실시예들에서, 데이터 요소들의 어레이(들)는 (각각) 데이터 포지션들의 어레이에 대응할 수 있다. 실시예들에서, 데이터 요소들 또는 포지션들의 어레이(들)는 (예컨대, 디스플레이를 위한) 정지 이미지 또는 비디오 프레임과 같은 원하는 (예컨대, 이미지) 출력의 전부 또는 일부에 대응할 수 있다. 즉, 일 실시예에서, 데이터 요소들의 어레이(들)는 이미지 데이터의 어레이(들), 즉 디스플레이를 위한 이미지를 생성하는 데 사용될 수 있는 데이터를 포함한다. 따라서, 데이터의 어레이는, 실시예들에서, 인코딩될 단일 정지 이미지에 대응할 수 있다. 다른 실시예들에서, 데이터의 어레이는 인코딩될 비디오 프레임들의 스트림의 일정 비디오 프레임에 대응할 수 있다.
실시예들은 이미지 및/또는 비디오 데이터를 포함하는 데이터 어레이(들)에 관한 것이지만, 데이터 어레이 배열들의 다른 예들이 원한다면 가능할 것이고, 대체적으로, 데이터 요소들의 어레이(들)는 본 명세서에 설명된 기술에 따라 적합하게 또는 바람직하게 인코딩될 수 있는 임의의 데이터 어레이를 포함할 수 있다.
실제로, 본 명세서에 기술된 실시예들 중 임의의 것에서, 데이터 요소들의 어레이(들)는 임의의 원하는 그리고 적합한 형태를 취할 수 있다.
예를 들어, 대체적으로, 데이터 요소들 또는 포지션들과 원하는 출력 사이에 임의의 원하는 그리고 적합한 대응성이 있을 수 있다. 예를 들어, 어레이(들)의 데이터 요소들 또는 포지션들은 각각 원하는 출력의 픽셀 또는 픽셀들에 대응할 수 있다. 데이터 요소들의 어레이(들)는 데이터 요소들 또는 포지션들의 면에서 임의의 원하는 그리고 적합한 크기 또는 형상일 수 있지만, 일 실시예에서 직사각형(정사각형을 포함함)이다. 데이터 요소들은, 또한, 예를 들어 이미지 데이터 값들(예컨대, 컬러 값들)을 표현하는 임의의 원하는 그리고 적합한 포맷을 가질 수 있다.
본 명세서에 기술된 실시예들 중 임의의 것에서, 데이터 요소들의 어레이(들)는 임의의 원하는 그리고 적합한 방식으로 제공될 수 있다. 실시예들은 어레이(들)의 데이터 요소들(중 적어도 일부 또는 전부)을 생성하는 것을 포함할 수 있다. 실시예들은, 또한 또는 대신에, 예컨대 메모리로부터, 어레이(들)의 데이터 요소들(중 적어도 일부 또는 전부)을 판독해내는 것을 포함할 수 있다.
어레이(들)의 데이터 요소들은 임의의 원하는 그리고 적합한 방식으로 생성될 수 있다. 실시예들에서, 어레이들의 데이터 요소들은 비디오 카메라와 같은 카메라에 의해 생성될 수 있다. 다른 실시예들에서, 어레이들의 데이터 요소들을 생성하는 것은 렌더링 프로세스를 포함할 수 있다. 렌더링 프로세스는 (예컨대, 그래픽 단편들을 생성하기 위한 프리미티브(primitive)들을 래스터화(rasterising)함으로써 그리고/또는 그래픽 단편들을 렌더링함으로써) 어레이들의 데이터 요소들에 의해 표현되는 데이터 값들을 도출하는 것을 포함할 수 있다. 그래픽 프로세서(그래픽 프로세싱 파이프라인)는 어레이들의 데이터 요소들을 생성하기 위해 사용될 수 있다. 그래픽 프로세싱 파이프라인은, 예컨대 어레이들의 데이터 요소들을 생성하기 위해, 그래픽 파이프라인 및 프로세서가 포함할 수 있는 임의의 적합한 그리고 원하는 프로세싱 스테이지들, 예컨대, 정점 셰이더(vertex shader), 래스터화 스테이지(래스터화기), 렌더링 스테이지(렌더러(renderer)) 등을 포함할 수 있다.
전형적으로, 데이터 어레이(들)의 데이터 요소들은 데이터 요소들의 "블록들"로서, 예컨대 블록 단위로, 인코딩될 수 있다. 예를 들어, 데이터 요소들의 어레이(들)는 (예컨대, 데이터 어레이 내의 다른 블록들을 사용하여, 또는 데이터 어레이들의 시퀀스에서의 인접한 데이터 어레이들 내의 블록들을 사용하여) 블록 단위로 인코딩되도록 복수의 소스 블록들로 분할될 수 있다. 따라서, 데이터 어레이 또는 데이터 어레이의 데이터 요소들을 프로세싱 또는 인코딩하는 것에 대한 본 명세서에서의 임의의 언급은 데이터 요소들의 그러한 블록들을 프로세싱 또는 인코딩하는 것을 포함하는 것으로 간주되어야 하고, 전형적으로는, 그를 수반한다. "블록"은 대체적으로, 데이터 요소들의 N × N 어레이를 포함할 수 있다.
따라서, 일 실시예에서, 예컨대 전체 프레임(이미지)을 표현하는 데이터 요소들의 (전체) 어레이를 인코딩할 때, 데이터 요소들의 (전체) 어레이는 복수의 블록들로 분할되고, 이어서 각각의 블록은 각각이 고정된 크기를 갖는 데이터 패킷들의 대응하는 세트를 제공하도록, 본 명세서에서 설명된 기술의 인코딩 스킴에 따라 인코딩된다. 즉, 일 실시예에서, 데이터 요소들의 더 큰 어레이 내의 데이터 요소들의 각각의 블록은 고정된 크기의 데이터 패킷 내에 인코딩(압축)된다. 따라서, 일 실시예에서, 고정된 크기의 데이터 패킷 내에 인코딩되어 있는 데이터 어레이는 더 큰 전체 데이터 어레이로부터의 데이터 요소들의 블록을 포함한다(그리고, 일 실시예에서, 이는 전체 데이터 어레이를 구성하는 복수의 블록들 각각에 대해 반복됨). 이어서, 블록들 각각에 대한 데이터 패킷들은 데이터 요소들의 전체 어레이를 표현하는 인코딩된 데이터 스트림으로, 소정 순서로, 적합하게 조합될 수 있다.
따라서, 일 실시예에서, 본 명세서에 설명된 기술은 블록 기반 스킴이며, 이때, 일 실시예에서, 각각의 블록은 독립적으로 인코딩되며, 따라서 블록들은 이어서 독립적으로 디코딩될 수 있다. 이는 본 명세서에 설명된 기술을 사용하여 인코딩된 프레임들 내의 블록들에 대한 랜덤 액세스를 용이하게 할 수 있다. 예를 들어, 데이터 패킷(블록)당 얼마나 많은 바이트들이 있는지가 대체적으로 알려질 것이고, 그리고 그에 따라 메모리 내의 개별적인 블록들의 위치가 용이하게 식별될 수 있으므로, 그들은 로딩하고 랜덤 액세스하기 용이하다.
데이터 요소들은, 예컨대 기준 프레임 또는 블록과 비교하여 차이 값들을 포함할 수 있다. 그러나, 더 종종, 인코딩 스킴은 원시 데이터를 인코딩하기 위해 사용되고, 따라서 데이터 요소들은 (원시) 픽셀 값들을 표현할 수 있다.
본질적으로, 본 명세서에 설명된 기술은 그의 원시 형태에서 주어진 크기를 가질 (N × N 블록과 같은) 데이터 요소들의 적절한 어레이를 취하며, 예컨대, 요구되는 압축 비율을 충족하기 위해 원하는 크기의 데이터 패킷 내에 그 어레이(블록)를 인코딩한다.
따라서, 본 명세서에 설명된 기술은 주어진 데이터 어레이를 고정된 크기를 갖는 데이터 패킷으로 압축할 수 있다. 예를 들어, 본 명세서에 설명된 기술은 원래의 크기의 1/2, 또는 1/3과 같은 고정된 (선택된) 비트 비율로 압축할 수 있다. 예를 들어, 그의 원시 형태에서 64 바이트인 블록은, 예를 들어, 블록당 32 바이트의 고정된 비율로 압축(1/2 비율 압축)될 수 있다. 유사하게, 96 바이트(예를 들어, 8 × 8 YUV420 블록에 대한 경우일 수 있음)를 갖는 원시 블록은 48 바이트(1/2 비율) 또는 32 바이트(1/3 비율)로 압축될 수 있다.
데이터 요소들의 어레이를 인코딩할 때, 본 명세서에 설명된 기술은 주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행한다. 따라서, 실시예들에서, 본 명세서에 설명된 기술은 프레임으로부터의 데이터 요소들의 연속적인 어레이들(블록들)을 취하고, 이어서 그것들을 주파수 도메인으로 적합하게 변환시킬 수 있다. 예를 들어, 실시예들에서, 이산 코사인 변환(discrete cosine transformation, DCT)이 사용될 수 있다. 그러나, 대체적으로, 임의의 적합한 공간-주파수 도메인 변환(spatial to frequency domain transformation)이 원하는 바에 따라 사용될 수 있다.
주파수 변환은 데이터 요소들의 어레이에 전체적으로 (2차원 주파수 변환으로서) 적용될 수 있거나, 또는 데이터 요소들의 어레이가 다수의 서브어레이들(이는 1차원, 예컨대 단일 행(row), 또는 다차원 중 어느 하나일 수 있음)로 분할될 수 있는데, 이때 각각의 서브어레이는 개별적으로 변환된다. 예를 들어, 어레이의 각각의 행은 1차원 주파수 변환을 사용하여 개별적으로 변환될 수 있다. 대안적으로, 어레이는, 이어서 개별적으로 변환되는, 다수의 더 작은, 예컨대, 2 × 2 서브어레이들로 분할될 수 있다. 그러나, 다른 배열들이 물론 가능할 것이다(그리고 변환의 수정들이 추가로 후술된다).
주파수 변환 오퍼레이션은 (이미지) 데이터를 압축하는 것을 도울 수 있다는 것이 이해될 것이다. 예를 들어, 주어진 이미지에 대해, 각각의 데이터 요소는 잠재적으로 공간 도메인 내에서의 동일한 양의 정보를 전달하므로, 비트들의 1/2을 제거하는 것은 잠재적으로 원래의 이미지로부터의 정보의 1/2을 손실시킬 것이다. 그러나, 주파수 도메인에서, 더 낮은 주파수 컴포넌트들은 전형적으로 더 높은 주파수 컴포넌트들보다 더 중요하다(더 많은 정보를 전달한다). 따라서, 원래의 이미지로부터 너무 많은 정보를 손실하지 않으면서 더 높은 주파수 컴포넌트들을 더 많이 제거하는 것이 가능하다.
이어서, (변환된) 주파수 도메인 계수들은 비트 평면 코딩을 사용하여 인코딩된다. 즉, 원시 (변환된) 주파수 도메인 계수 값들은 이어서, 복수의 비트 평면 어레이들을 사용하여 이어서 표현될 수 있는 이진 비트 평면들의 세트로 분해되고, 각각의 비트 평면 어레이는 주파수 도메인 계수 (크기) 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함한다.
예를 들어, 6-비트 데이터 표현의 경우, 이어서 6개의 비트 평면들이 있을 것인데, 이때 최상위 비트(MSB)들은 더 높은 (상부) 비트 평면들에 포함되며, 이는 따라서 가장 대략적이지만 가장 중대한 정보를 포함하고, 그리고 이에 따라 최하위 비트 평면을 향해 비트 평면들을 아래로 이동하면, 최종 출력(이미지)에 대한 기여가 점진적으로 덜 유의적이게 된다. 예를 들어, "1"의 값을 갖는 m-비트 데이터세트 상의 n 번째 비트 평면 상의 비트는 최종 출력(이미지)에 대해 2(m-n)의 값을 기여할 것이다. 즉, 주어진 비트 평면은 효과적으로 이전 (더 높은) 비트 평면의 값의 1/2을 기여할 수 있다. 다시 말하면, 비트 평면들의 시퀀스를 통해 아래쪽으로 작업하면, 다음 비트 평면을 추가하는 것이 이에 따라 최종 출력(예컨대, 이미지)의 점진적으로 더 양호한 근사치를 제공한다.
이어서, 주파수 도메인 계수들의 비트 평면 인코딩된 표현(즉, 비트 평면 어레이들)은 데이터 패킷이 가득 찰 때까지(원하는 고정된 크기에 도달할 때까지) 최상위 비트 평면으로부터 아래쪽으로 순서대로 작업하면서 데이터 패킷 내에 놓인다. 따라서, 고정된 크기의 데이터 패킷을 생성하기 위해, 본 명세서에 설명된 기술은 최상위 비트를 표현하는 비트 평면 어레이로부터 시작하고, 데이터 패킷이 가득 찰 때까지, 최하위 비트 평면을 향해 아래쪽으로 작업하여, 비트 평면들의 시퀀스 내의 각각의 비트 평면을 차례로 인코딩한다. 이러한 방식으로, (원하는 고정된 크기에 도달할 때) 가장 중대한 정보가 데이터 패킷 내에 놓이는 것 및 (단지) 더 낮은 하위 비트 평면 정보가 폐기되는 것이 보장될 수 있다.
따라서, 후술하는 인코딩은 데이터 패킷이 가득 찰 때(이 시점에서 인코딩이 중지됨)까지 수행된다는 것이 이해될 것이다(이때 아직 인코딩되지 않은 임의의 나머지 비트들(및 비트 평면들)은 이어서 데이터 패킷 내에 포함되지 않음).
전술한 바와 같이, 종종, 주파수 도메인 계수들의 비트 평면 표현은 다수의 선두 "0들"을 포함할 것이므로, 최고 비트 평면들은 "빈 상태"일 수 있다(즉, 비트 평면 어레이는 "0들"의 어레이를 포함함). 최고 비트 평면들이 비어 있고, 활성인 주파수 도메인 계수들(그 비트 평면 내에 0이 아닌 비트 값들을 갖는 계수들)을 포함하지 않는 경우, 이는, 인코딩의 시작 시에, 예컨대, 주파수 도메인 계수의 0이 아닌 비트 값을 포함하는 제1 비트 평면(제1의 "활성인" 비트 평면)에 도달할 때까지 비트 평면 시퀀스 내의 각각의 빈 비트 평면에 대한 데이터 패킷의 시작에 "0"을 포함시킴으로써 (예컨대, 이에 따라 데이터 패킷이 선두 0들의 시퀀스를 포함할 것임) 적합하게 표시될 수 있다.
그러나, 제1의 활성인 비트 평면을 표시하기 위한 다른 적합한 배열들이 물론 가능하다.
일단 (최상위 비트를 표현하는 비트 평면으로부터 아래쪽으로 작업하면서) 하나 이상의 0이 아닌 비트 값(들)을 포함하는 비트 평면 시퀀스 내의 제1 비트 평면 어레이에 도달하면, 이러한 (제1) 비트 평면 어레이는 이어서 본 명세서에 설명된 기술의 특정 인코딩 스킴에 따라 인코딩될 수 있다. 이어서, 비트 평면 시퀀스 내의 후속 비트 평면 어레이들 각각은 데이터 패킷이 가득 찰 때(이 시점에서 인코딩이 중지됨)까지 본 명세서에 설명된 기술의 인코딩 스킴에 따라 차례로 인코딩된다.
특히, 각각의 비트 평면에 대한 정보를 인코딩하기 위해, 본 명세서에 설명된 기술은, 비트 평면 어레이를 각자의 섹션들로 세분하고, 어느 섹션(들)이 새롭게 활성인 주파수 도메인 계수(즉, 제1의 0이 아닌 비트 포지션이 그 비트 평면에 의해 표현되는 주파수 도메인 계수)를 갖는지를 표시함으로써, 그리고 이어서, 그 비트 평면 내의 새롭게 활성인 주파수 도메인 계수를 포함하는 임의의 섹션에 대해서, 그리고 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 (더 높은) 비트 평면 내에 나타났던 임의의 섹션들에 대해서, 해당 비트 평면 내의 개별적인 주파수 도메인 계수 포지션들까지 필요에 따라 아래로, 그 섹션을 섹션들로 세분하고, 어느 서브섹션이 임의의 새롭게 활성인 계수들을 포함하는지를 표시함으로써 등을 함으로써, 각각의 비트 평면 어레이 내에 (새롭게) 나타난 계수들의 위치들을 재귀적으로 인코딩하는 기법을 사용한다.
일 실시예에서, 비트 평면 어레이들은, 예컨대, 재귀적 쿼드 트리 파티셔닝 데이터 구조(recursive quad tree partitioning data structure)를 사용하여, 사분면들로 세분된다. 따라서, 실시예들에서, 섹션들 또는 서브섹션들로의 임의의 세분은 사분면들 또는 서브-사분면들로의 세분을 포함한다. 따라서, "섹션"에 대한 본 명세서에서의 임의의 언급은 실시예들에서 "사분면"을 지칭하는 것으로 이해될 수 있다. 그러나, 비트 평면 어레이들을 "섹션들"로 세분하기 위한 다른 배열들이 또한 가능할 것이다.
따라서, 각각의 비트 평면 어레이는, 비트 평면 어레이를 각자의 섹션들로 세분하고, 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 내의 임의의 섹션들을 새롭게 활성인 것으로 표시함으로써, 그리고 이어서, 그 비트 평면 내의 새롭게 활성인 계수(들)의 위치(들)가 표시될 때까지, 재귀적으로 각각의 현재 활성인 섹션을 각자의 서브섹션들로 세분하고, 그 비트 평면 내의 새롭게 활성인 임의의 서브섹션들을 표시함으로써 인코딩된다.
따라서, 각각의 비트 평면의 인코딩은, 각각의 비트 평면 어레이가 개별적인 계수들의 레벨까지 아래로 다수의 상이한 레벨들에 걸쳐 분할되고 세분되면서 재귀적으로 진행한다.
예를 들어, 주어진 비트 평면의 제1 (최고) 레벨의 인코딩 동안, 비트 평면은 섹션들(사분면들)의 제1 세트로 분할되고, 이들 섹션들 중 임의의 섹션이 그 섹션 내의 주파수 도메인 계수들 중 적어도 하나에 대해 0이 아닌 비트 값을 새롭게 포함하는지 여부가 결정되고 표시된다. 이어서, 다음 레벨에서, 인코딩은 추가로, 개별적인 계수들의 레벨까지 아래로, 그러한 섹션들을 서브섹션들로 세분하고, 이들 서브섹션들 중 어느 서브섹션이 임의의 새롭게 활성인 계수들을 포함하는지를 표시하는 등을 행한다. 이러한 방식으로, 그 비트 평면 내의 새롭게 활성인 개별적인 계수들의 포지션들이 표시된다.
일단 하나의 (예컨대, 제1) 비트 평면 어레이가 이러한 방식으로 인코딩되었다면, 데이터 패킷이 가득 찰 때까지, 비트 평면 시퀀스 내의 다음 비트 평면 어레이가 동일한 방식으로 인코딩되는 등이 행해진다. 다음 비트 평면에 대하여, 제1 (최고) 레벨의 인코딩은, 또 다시, 임의의 새롭게 활성인 섹션들을 탐색한다. 그러나, 다음 레벨에서, 인코딩은 이제, 그 비트 평면 내의 새롭게 활성인 섹션들뿐만 아니라 이전 비트 평면의 인코딩 동안 "활성화된" 임의의 섹션들을 탐색한다. 이어서, 현재 활성인 섹션들 모두에 대해, 개별적인 계수들의 레벨까지 아래로, 새롭게 활성인 계수들을 포함하는 임의의 서브섹션들의 위치들이 표시되는 등이 행해진다.
예를 들어, N × N 비트 평면 어레이의 경우, 일 실시예에서, 어레이는 먼저 4개의 N/2 × N/2 사분면들로 세분되고, 그리고 이어서, 이들 사분면들 중 (만약 있다면) 어느 사분면이 (이전 비트 평면(들)과 비교하여) 새롭게 활성인지가 표시된다. 이어서, N/2 × N/2 사분면들 중 현재 활성인 임의의 사분면(따라서, 현재 데이터 평면 내의 임의의 새롭게 활성인 사분면들뿐만 아니라 더 높은 비트 평면 내의 새롭게 활성인 것으로 표시되었던 임의의 사분면들)은, 그 비트 평면 내의 새롭게 활성인 계수들의 포지션들이 표시될 때까지, 추가로 N/4 × N/4 사분면들로 세분되고, 이들 사분면들 중 어느 사분면이 새롭게 활성이 되는지에 대한 표시가 제공되는 등을 할 수 있다. 따라서, 4 × 4 비트 평면 어레이의 경우, 각각의 비트 평면 어레이에 대해 2개의 레벨들의 세분만이 있을 것임(비트 평면 어레이의 4개의 2 × 2 사분면들로의 초기 분할, 및 이어서 이들 사분면들의 각자의 1 × 1 계수들로의 분할)이 이해될 것이다. 한편, 2n × 2n 비트 평면 어레이는 대체적으로 n회 세분될 수 있다.
따라서, 각각의 연속적인 비트 평면 레벨은 비트 평면 시퀀스 내의 선행 (더 높은) 비트 평면들에 대한 활성인 사분면들의 위치들을 인코딩(표시)하므로, 예를 들어, 사분면이 이미 이전에 더 높은 비트 평면에서 새롭게 활성인 계수를 포함하는 것으로 표시되었던 경우, 비트 평면 시퀀스 내에서 아래의 다음 비트 평면에 대하여, 활성인 사분면 표시는 나머지 3개의 사분면들 중 (만약 있다면) 어느 사분면이 활성인 계수(주파수 도메인 계수에 대한 0이 아닌 비트 값)를 새롭게 포함하는지를 표시한다. 따라서, 각각의 비트 평면 인코딩은 위의 계층에 대하여 상황 의존적이다(그리고 위의 계층에 대한 임의의 변경들을 알려준다).
따라서, 본 명세서에 설명된 기술의 인코딩 스킴에서, 비트 평면 시퀀스 내의 각각의 비트 평면에 대해, 새롭게 활성인 섹션들, 즉, 이전에 더 높은 비트 평면의 인코딩 동안 활성인 것으로 표시되지 않았던 것들이 표시된다는 것이 이해될 것이다.
대체적으로, 임의의 적합한 코드를 사용하여 주어진 비트 평면(계층) 내의 새롭게 활성인 사분면들의 위치들을 표시할 수 있다. 그러나, 코드가 현재 활성인 섹션들 내의 임의의 계수들의 포지션들 및 값들과 함께, 새롭게 활성인 섹션들만을 표시할 필요가 있기 때문에, 코드는 유리하게도 비교적 단순하게 유지될 수 있다는 것이 이해될 것이다. 예를 들어, 본 명세서에 설명된 기술의 재귀적 인코딩 스킴들은 비교적 복잡한 유효 비트(significant bit) 의존성들이 비교적 낮은 비용 (낮은 복잡성) 가변 길이 코드 표를 사용하여 인코딩되도록 허용할 수 있다.
이 모두는 특히, 주파수 도메인 계수들의 비트 평면 표현들 내의 선두 "0들"을 효율적인 방식으로 압축하는 효과를 갖는다.
상기 방식으로 주어진 비트 평면에 대한 새롭게 활성인 주파수 도메인 계수들의 위치들을 인코딩하는 것뿐만 아니라, 데이터 패킷에 충분한 공간이 남아있는 한, 일 실시예에서 해당 비트 평면에 대한 새롭게 활성인 계수(들)의 부호(들)(포지티브 또는 네거티브)를 표시하는 부호 비트들을 또한 표시하는 추가의 데이터가, 일 실시예에서, 해당 비트 평면에 대한 "위치" 데이터를 뒤따라 데이터 패킷 내에 포함된다. 일 실시예에서, 해당 비트 평면에 대한 새롭게 활성인 계수(들)에 대한 부호 비트들뿐만 아니라, 제1의 0이 아닌 비트 값이 시퀀스 내의 더 높은 비트 평면 내에 나타났던 그 비트 평면 내의 임의의 계수들에 대한 비트 값들(제1의 0이 아닌 비트 값이 더 높은 비트 평면 내에 나타났고, 그리고 이에 따라 이전에 "활성화된", 그리고 그에 따라 그의 포지션이 더 높은 비트 평면의 인코딩 동안 표시되었던, 임의의 주파수 도메인 계수들에 대한 비트 값들을 표현하는, 해당 비트 평면에 대한 소위 "정밀 비트 값들". 따라서, 정밀 비트 값들은 주어진 계수의 선두의 0이 아닌 비트 포지션을 뒤따르는 비트 포지션들에 대한 비트 값들임)을 표시하는 데이터가 또한 데이터 패킷 내에 포함된다.
일 실시예에서, 이들 부호 및 정밀 비트 값들은 그들의 원시 형태(즉, 그러한 비트들의 참(true) 값들을 표시함)(부호 비트의 경우에, 할당된 값, 예컨대, 포지티브에 대해서는 "1" 그리고 네거티브에 대해서는 "0"일 수 있거나, 또는 그 반대일 수 있음)로 인코딩된다.
일 실시예에서, 부호 비트들은 임의의 새롭게 활성인 계수들(의 위치들)이 인코딩(표시)된 직후에 인코딩된다. 즉, 일 실시예에서, 새롭게 활성인 계수에 대한 각자의 부호 비트는 데이터 패킷 내에서, 그 계수의 위치를 표시하는 데이터 바로 뒤에 인코딩(표시)된다.
한편, 일 실시예에서, 주어진 비트 평면 어레이에 대한 정밀 비트 값들은, 그 비트 평면 어레이에 대한 새롭게 활성인 계수들 모두가 (그리고 실시예들에서, 그들 각자의 부호들과 함께) 인코딩(표시)된 후에만 인코딩(표시)된다. 예를 들어, 특정 비트 평면에 대한 정밀 비트 값들은, 데이터 패킷 내에서, 그 비트 평면에 대한 새롭게 활성인 계수들에 대한 위치들(및 일 실시예에서는 부호들)을 표시하는 데이터 뒤에, 그 비트 평면에 대한 코드의 최종 부분으로서 인코딩(표시)될 수 있다. 이어서 이는, 그 비트 평면이 완전히 인코딩되기 전에 데이터 패킷의 끝에 도달하기 때문에 비트 평면의 인코딩이 중지되는 경우, 비트 평면에 대한 새로운 유효 비트들이 정밀 비트 값들 전에 우선적으로 인코딩될 것임을 의미한다.
따라서, 일 실시예에서, (데이터 패킷 내에 이용가능한 공간이 있는 한) 각각의 비트 평면에 대해, 인코딩은 먼저 그 비트 평면 내의 임의의 새롭게 활성인 섹션들(의 위치들)을 표시하고, 이어서 그 비트 평면 내에서 현재 활성인 임의의 섹션들 (및 서브섹션들) 내의 임의의 새롭게 활성인 계수들의 위치들 및 (일 실시예에서) 부호들을 표시하고, 그리고 이어서 마지막으로, 이전 비트 평면에서 "활성화된" 임의의 계수들에 대한 정밀 비트 값들을 추가한다.
따라서, 실시예들에서, 데이터 패킷 내에 이용가능한 공간이 있는 한, 각각의 비트 평면 어레이에 대한 인코딩은, 데이터 패킷 내에서, 새롭게 활성인 계수의 위치를 표시하는 데이터 뒤에, 그 새롭게 활성인 계수에 대한 부호를 표시하는 데이터를 포함시키는 것을 추가로 포함한다.
추가적으로(또는 대안적으로), 실시예들에서, 데이터 패킷 내에 이용가능한 공간이 있는 한, 각각의 비트 평면 어레이에 대한 인코딩은, 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 계수(들)에 대한 원시 비트 값들을 표시하는 데이터를 패킷 데이터 내에 포함시키는 것을 추가로 포함할 수 있다. 일 실시예에서, 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 계수(들)에 대한 비트 값들을 표시하는 이러한 데이터는 데이터 패킷 내에서, 그 비트 평면 내의 새롭게 활성인 계수(들) 모두의 포지션(들)이 표시된 뒤에 포함된다.
인코딩되고 있는 데이터가 다수의 데이터 채널들(예컨대, YUV 또는 RGB 데이터)을 포함하는 경우, 일 실시예에서, 각각의 채널은 개별적으로 인코딩되고, 일 실시예에서, 인코딩은 비트 평면 내의 각각의 데이터 채널에 대한 정밀 비트 값들을 인코딩하기 전에, 먼저 각각의 데이터 채널(컬러 평면)에 대한 새롭게 활성인 계수들의 위치들을 차례로 (인터리빙된(interleaved) 방식으로) 인코딩하도록 하는 것이다. 이어서 이는, 데이터 패킷의 끝에 도달하기 때문에 비트 평면 인코딩이 중지되는 경우, 각각의 컬러 채널에 대한 새로운 유효 비트들이 정밀 비트 값들 전에 우선적으로 인코딩될 것임을 의미한다.
본 출원인은 또한, 이러한 인코딩 배열이 특정 형태의 입력 데이터에 대해서는 그렇게 적절하지 않을 수 있음을 인식하였다. 예를 들어, 위에서 논의된 바와 같이, 이러한 인코딩 기법은 주파수 도메인으로 변환된 이미지 데이터를 효율적으로 인코딩하는 데 특히 적절할 수 있으며, 여기에서는, "0"들의 선두 시퀀스가 있을 것으로 기대된다. 그러나, 랜덤 입력 데이터와 같은 다른 형태들의 입력 데이터의 경우, 이 기법들은 덜 효율적일 수 있다.
이 경우에, 실시예들에서, 인코더는 본 명세서에 설명된 기술에 따라 설명된 특정 인코딩 스킴을 사용할 때의 사례들이 덜 적합할 수 있다는 것을 인식할 수 있고, 그리고 그러한 경우에, 일 실시예에서, 입력 데이터를 상이한 방식으로, 예컨대, (주파수 변환 및 비트 평면 코딩을 수행함으로써 입력 데이터를 인코딩하지 않고서) 원시 포맷으로 인코딩하고, 그것이 행해졌다는 것을 디코더에 표시할 수 있다. 따라서, 인코더는 입력 데이터에 기초하여 복수의 상이한 이용가능한 인코딩 스킴들 중에서 선택할 수 있다. 인코더는 다양한 적합한 방식들로 입력 데이터에 기초하여, 예컨대 적합한 메트릭에 기초하여, 인코딩 스킴을 선택할 수 있다. 예를 들어, 실시예들에서, 인코더는, 예컨대 본 명세서에 설명된 바와 같이, 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하고, 이어서 변환된 계수들의 절대값들의 합, 또는 유사한 것과 같은 적합한 메트릭에 기초하여 인코딩 스킴을 선택할 수 있다.
즉, 인코더는 주파수 변환 오퍼레이션을 수행하고, 이어서 주파수 변환된 계수들을 분석하여 본 명세서에 설명된 기술에 따라 설명된 인코딩 스킴이 적합한지(개선을 제공할 가능성이 있는지) 여부를 검사할 수 있다. 변환된 계수들의 절대값들의 합이, 본 명세서에 설명된 기술에 따라 설명된 인코딩 스킴이 유리하다고 표시할 때(예컨대, 합이 원시 입력 데이터의 절대값들의 합보다 더 작을 때), 변환된 계수들은 비트 평면 인코딩될 수 있고, 이어서 비트 평면 표현된 데이터는, 전술된 바와 같이 본 명세서에 설명된 기술의 특정 인코딩 스킴에 따라 재귀적으로 인코딩된다. 한편, 검사가, 본 명세서에 설명된 기술에 따라 설명된 인코딩 스킴이 적합하지 않다고 (또는 덜 적합하다고) 표시하는 경우, 입력 데이터는 (예컨대) 그의 원시 형태로 인코딩될 수 있다.
본 명세서에 설명된 기술은 고정된 크기를 갖는 데이터 패킷들을 생성한다. 따라서, 일단 데이터 패킷이 가득 차면, 임의의 나머지 비트들은 효과적으로 폐기된다. 따라서, 고정된 크기의 데이터 패킷으로의 인코딩은 본질적으로 손실이 있다. 그러나, 본 기법들은 또한, 손실이 있게 인코딩된 고정된 크기의 데이터 패킷들을 제공할 뿐만 아니라, 원래의 입력 데이터를 재구성하기 위해 요구되는 나머지 비트 값들 중 임의의 것(및 전부)을 표시하는 정보를 포함하는 "무손실 보상" 계층의 형태로 데이터의 추가 세트를 또한 (개별적으로) 제공함으로써, 무손실 압축을 제공하도록 확장될 수 있다.
따라서, 무손실 보상 계층은 고정된 크기의 데이터 패킷으로 인코딩할 때 손실되는 정보를 보상하는 데 요구되는 정보를 포함한다. 이어서, 무손실 보상 계층은 아무 손실 없이 원래의 (이미지) 데이터를 복원하기 위해 고정된 크기의 데이터 패킷과 조합하여 사용될 수 있다.
따라서, 실시예들에서, 데이터 패킷이 가득 찰 때, 본 방법은, 고정된 크기의 데이터 패킷과 함께 무손실 보상 계층이 손실 없이 원래의 입력 데이터를 복원하기 위해 요구되는 정보 모두를 포함하도록, 데이터가 고정된 크기의 데이터 패킷 내에 포함되지 않았던 임의의 비트들(및 비트 평면들)에 대한 비트 값들 및 위치들을 표시하는 정보를 포함하는 무손실 보상 계층을 생성하는 단계(생성하는 인코딩 회로부)를 추가로 포함한다.
따라서, 무손실 보상 계층은 대체적으로 고정된 크기의 데이터 패킷 내에 포함되지 않았던 비트들 중 임의의 (및 모든) 비트에 관한 정보를 포함하고, 따라서 이 정보는 원래의 입력 데이터를 완전히 복원할 수 있도록 하는 데 필요하다. 예를 들어, 무손실 보상 계층은, 고정된 크기의 데이터 패킷으로 인코딩되지 않았던 임의의 비트들에 대한 원시 비트 값들(소위 "보상 비트들")을, 그러한 비트들의 위치들을 표시하는 정보와 함께 포함할 수 있다. 예를 들어, 보상 비트들에 대한 비트 값들은 (고정된 크기의 데이터 패킷 내에 포함되지 않았던 제1 비트 값으로부터 시작하여) 소정 순서로 무손실 보상 계층 내에 패킹될 수 있고/있거나, 무손실 보상 계층은 보상 비트들에 대한 위치 정보를 명시적으로 포함할 수 있다(예컨대, 무손실 보상 계층은 보상 비트들을 어레이 또는 다른 적합하게 정렬된 데이터 구조 내에 저장할 수 있다).
무손실 보상 계층은 고정된 크기의 데이터 패킷과 별개이므로, 고정된 크기의 데이터 패킷은 무손실 보상 계층과는 개별적으로 그리고 독립적으로 제공될 수 있다. 따라서, 고정된 비트 비율을 보장하는 것이 요구되는 경우, 그리고 원래의 정보의 일부를 잃는 것이 허용가능한 경우, 고정된 크기의 데이터 패킷이 (무손실 보상 계층을 제공하지 않고서) 제공될 수 있다. 그러나, 일부 경우에, 원래의 데이터의 완전한 무손실 복원을 허용하기 위해, 무손실 보상 계층을 또한 (개별적으로) 제공하는 것이 바람직할 수 있다.
이는, 예를 들어, 비디오 프레임들이 인코딩되고 있고, 손실이 있게 인코딩되었던 일부 프레임들이 기준 프레임들로서 사용될 필요가 있을 경우(이 경우에, 기준 프레임들은 인코더에 의해 무손실 방식으로 재구성될 필요가 있을 것임)에 바람직할 수 있다.
따라서, 기준 프레임들의 경우, 그러한 프레임들의 무손실 재구성을 허용하기 위한 추가적인 무손실 보상 계층이 인코더에 의해 제공될 수 있다. (이 경우에, 일 실시예에서, 디코더는, 프레임의 무손실 버전을 복원할 필요가 없기 때문에, 프레임의 손실이 있게 인코딩된 버전을 여전히 간단히 수신할 것이다.)
이러한 경우에, (예컨대, 인코더에서 기준 프레임으로서 사용하기 위해) 무손실 인코딩을 할 때 프레임을 완전히 정확하게 재구성할 수 있도록, 공간-주파수 도메인 변환이 완벽하게 가역일 필요가 있을 수 있다.
그러나, 라운딩(rounding) 프로세스들로 인해, 그것은 모든 형태들의 주파수 도메인 변환에 해당되지 않을 수 있다. 예를 들어, 일 실시예에서, 주파수 변환 오퍼레이션은 데이터 요소들의 어레이(또는 그의 서브어레이)를 정수 행렬과 곱하는 것, 및 이어서, 예컨대, 라운딩된 우측 시프트(rounded right shift)를 수행함으로써 값들을 라운딩하는 것을 포함한다. 그러나, 정수 곱셈 행렬이 영역들을 동일한 볼륨(volume)의 영역에 맵핑하더라도, 라운딩 스테이지에 의해 도입되는 에러들은 행렬이 대체적으로 가역적이지 않다는 것을 의미할 수 있다.
따라서, 실시예들에서, 적어도 무손실 인코딩을 수행할 때, 수정된 주파수 도메인 변환 프로세스가 사용될 수 있으며, 이는 특히, 라운딩되고 있는 값들에 따라 라운딩 오퍼레이션을 수정하여, 원래의 고유 입력을 생성하기 위해 역으로 (역이) 될 수 있는 변환 프로세스를 제공한다. 특히, 라운딩 오퍼레이션은 (변환을 역으로 할 때, 대응하는 고유 입력들로 다시 역으로 될 수 있는 고유 출력들을 갖도록) 주파수 도메인 변환에 대한 2개의 (또는 그 이상의) 입력들이 동일한 변환된 출력에 맵핑되는 것을 회피하도록 구성된다.
따라서, 실시예들에서, 주파수 변환 오퍼레이션은 각각의 데이터 요소를 고유 주파수 도메인 계수 출력으로 변환하여, 주파수 변환 오퍼레이션이 가역이도록 구성된다.
예를 들어, 라운딩이 2개의 입력들로 하여금 동일한 출력 값으로 변환되게 할 수 있다고 식별될 때, 출력들을 이격시키고 각각의 입력이 고유하게 변환되는 것을 보장하도록, 상이한 라운딩 값들이 그러한 입력들에 사용될 수 있다.
따라서, (통상적으로, 예컨대, 손실 변환을 구현할 때의 경우와 같이) 반드시 가장 가까운 값으로 라운딩하기보다는, 일 실시예에서, 바이어스된 라운딩(biased rounding)이 사용되는데, 여기서는 변환에 대한 각각의 입력이 고유 출력으로 맵핑되어 변환이 완전히 가역이도록 라운딩 값들이 선택된다.
라운딩 값들은 입력 값들에 기초하여 선택될 수 있다. 예를 들어, 라운딩 값들은 값들의 "클래스(class)"에 기초하여 선택될 수 있는데, 이는, 예컨대, 값의 최하위 비트들로부터 결정될 수 있다. 라운딩 값들은, 예컨대, 적합한 룩업 테이블 내에 저장될 수 있다.
또한, 변환되고 있는 각각의 데이터 요소가 고유하게 맵핑되는 것을 보장하기 위해 라운딩 값들을 선택하도록 구성된 라운딩 오퍼레이션을 포함하는 이러한 무손실 주파수 변환을 사용하는 무손실 인코딩이 그 자체로 신규하고 창의적인 것으로 여겨진다.
따라서, 본 명세서에 설명된 기술의 다른 실시예는 값들의 공간 분포를 표현하는 데이터 요소들의 어레이를 인코딩하는 방법을 포함하며, 이 방법은,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하는 단계 - 주파수 변환 오퍼레이션은 라운딩 오퍼레이션을 포함하고, 라운딩 오퍼레이션은 변환되고 있는 각각의 데이터 요소가 고유 주파수 도메인 계수 출력에 맵핑되는 것을 보장하기 위해 라운딩되고 있는 값들에 대한 라운딩 값들을 선택하도록 구성됨 -; 및
데이터 요소들의 어레이의 인코딩된 표현을 제공하기 위해 주파수 도메인 계수들의 세트를 인코딩하는 단계를 포함한다.
본 명세서에 설명된 기술의 다른 실시예는 값들의 공간 분포를 표현하는 데이터 요소들의 어레이를 인코딩하기 위한 장치를 포함하고, 장치는 인코더를 포함하고, 인코더는,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하도록 구성된 변환 회로부 - 주파수 변환 오퍼레이션은 라운딩 오퍼레이션을 포함하고, 라운딩 오퍼레이션은 변환되고 있는 각각의 데이터 요소가 고유 주파수 도메인 계수 출력에 맵핑되는 것을 보장하기 위해 라운딩되고 있는 값들에 대한 라운딩 값들을 선택하도록 구성됨 -; 및
데이터 요소들의 어레이의 인코딩된 표현을 제공하도록 주파수 도메인 계수들의 세트를 인코딩하기 위한 인코딩 회로부를 포함한다.
이러한 방식으로, 주파수 변환 오퍼레이션이 가역이라는 (역으로 될 수 있는) 것이 보장될 수 있다. 따라서, 주파수 도메인 계수들이 무손실 압축 기법을 사용하여 인코딩될 때, 전체 인코딩 프로세스는 무손실로 행해질 수 있다.
임의의 적합한 주파수 변환 오퍼레이션이 사용될 수 있다. 예를 들어, 일 실시예에서, 주파수 변환 오퍼레이션은 데이터 요소들의 어레이를 정수 행렬과 곱하는 것, 및 이어서 라운딩 오퍼레이션을 수행하는 것을 포함할 수 있다.
일 실시예에서, 전술된 바와 같이, 주파수 도메인 계수들의 세트는 본 명세서에 설명된 기술의 무손실 확장의 방식으로 인코딩되는데, 즉, 여기서 주파수 도메인 계수들이 복수의 비트 평면 어레이들로서 인코딩되고, 이어서, 데이터 패킷이 가득 찰 때까지, 주파수 도메인 계수들의 세트가 최상위 비트 평면으로부터 아래쪽으로 작업하면서 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 데이터 패킷으로서 인코딩되고, 그리고 여기서, 예컨대, 고정된 크기의 데이터 패킷으로 인코딩되지 않은 임의의 비트들에 대한 원시 값들을 포함하는 "무손실 보상" 계층이 이어서 생성된다. 그러나, 다른 적합한 (무손실) 보장 스킴들이 물론 사용될 수 있다.
실시예들에서, 라운딩 오퍼레이션은, 응용예에 따라, 예컨대, 무손실 보상 계층을 제공하는 것이 요구되는지 여부에 따라, 전술한 바와 같이, 자연스러운 "가장 가까운 것으로의 라운딩(round to nearest)" 오퍼레이션 또는, "가역" 라운딩 오퍼레이션 중 어느 하나이도록 선택될 수 있다. 이는, 예를 들어, 디코더가 어느 변환 오퍼레이션이 적용되었는지를 결정할 수 있도록, 비트 스트림 내에서 시그널링될 수 있다.
따라서, 본 명세서에 설명된 기술의 인코딩은, 일 실시예에서, 고정된 크기의 데이터 패킷들의 시퀀스(예컨대, 각각은 데이터 요소들의 어레이(또는 블록)를 표현함)를 포함하는 데이터 스트림을 생성한다. 인코더에 의해 생성된 인코딩된 데이터 스트림은 (예컨대, 후속 디코딩 및/또는 송신을 위해) 저장을 위해 메모리로 출력될 수 있거나, 또는 (예컨대, 후속 디코딩 및 선택적으로 디스플레이를 위해) 외부 디바이스로 출력될 수 있다.
본 명세서에 설명된 기술은, 또한, (예컨대, 본 명세서에 설명된 기술에 따라 인코딩된) 데이터 어레이들을 인코딩한 데이터 스트림들을 디코딩하기 위한 대응하는 방법들 및 장치들로 확장된다.
본 명세서에 설명된 기술의 다른 실시예는 데이터 스트림을 디코딩하기 위한 방법을 포함하며, 데이터 스트림은 비트 평면 어레이들의 시퀀스로서 주파수 도메인 계수들의 세트를 인코딩하는 고정된 크기의 데이터 패킷을 포함하고, 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함하고, 고정된 크기의 데이터 패킷은, 고정된 크기의 데이터 패킷 내에 인코딩된 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대한, 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치(들)를 표시하는 데이터뿐만 아니라, 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 주파수 도메인 계수(들)의 위치(들)가 표시될 때까지, 임의의 재귀적으로 정의된, 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들의 서브섹션들 및 또한 비트 평면 시퀀스 내의 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 서브섹션들에 대한 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들의 임의의 서브섹션들의 위치(들)를 표시하는 데이터 등을 포함하고, 이 방법은,
고정된 크기의 데이터 패킷으로부터, 고정된 크기의 데이터 패킷 내에 인코딩된 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대하여, 0이 아닌 비트 값이 그 비트 평면 어레이 내에 처음 나타난 주파수 도메인 계수들의 위치(들)를 결정하는 단계;
식별된 위치(들)를 사용하여 복수의 비트 평면 어레이들을 생성하는 단계 - 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -;
주파수 도메인 계수들의 세트를 생성하도록 생성된 비트 평면 어레이들을 조합하는 단계; 및
디코딩된 출력을 획득하도록 주파수 도메인 계수들의 세트를 사용하는 단계를 포함한다.
본 명세서에 설명된 기술의 다른 실시예는 비트 평면 어레이들의 시퀀스로서 주파수 도메인 계수들의 세트를 인코딩하는 고정된 크기의 데이터 패킷을 포함하는 데이터 스트림을 디코딩하기 위한 장치를 포함하며, 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함하고, 고정된 크기의 데이터 패킷은, 고정된 크기의 데이터 패킷 내에 인코딩된 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대한, 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치(들)를 표시하는 데이터뿐만 아니라, 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 주파수 도메인 계수(들)의 위치(들)가 표시될 때까지, 임의의 재귀적으로 정의된, 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들의 서브섹션들 및 또한 비트 평면 시퀀스 내의 제1의 0이 아닌 비트 값이 비트 평면 어레이 내에 나타난 서브섹션들에 대한 제1의 0이 아닌 비트 값이 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들의 임의의 서브섹션들의 위치(들)를 표시하는 데이터 등을 포함하고, 이 장치는 디코더를 포함하고, 디코더는,
고정된 크기의 데이터 패킷으로부터, 고정된 크기의 데이터 패킷 내에 인코딩된 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대하여, 0이 아닌 비트 값이 그 비트 평면 어레이 내에 처음 나타난 주파수 도메인 계수들의 위치(들)를 결정하도록 구성된 입력 회로부;
각각의 비트 평면 어레이에 대한 주파수 도메인 계수들의 식별된 위치(들)를 사용하여 복수의 비트 평면 어레이들을 생성하도록 - 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 비트 포지션에서의 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -, 그리고 주파수 도메인 계수들의 세트를 생성하도록 생성된 비트 평면 어레이들을 조합하도록 구성된 비트 평면 디코딩 회로부; 및
디코딩된 출력을 획득하기 위해 주파수 도메인 계수들의 세트를 사용하도록 구성된 출력 회로부를 포함한다.
따라서, 디코딩 프로세스는 본질적으로, 비트 평면 어레이들의 세트를 생성하기 위해, 고정된 크기의 데이터 패킷으로부터, 고정된 크기의 데이터 패킷 내에 인코딩되었던 비트 평면 시퀀스 내의 각각의 비트 평면 내의 활성인 계수들의 포지션들을 (즉, 고정된 데이터 패킷 크기에 도달하기 전에) 먼저 식별하고, 그리고 이어서, 복수의 비트 평면 어레이들로부터, 디코딩된 출력을 획득하는 데 사용될 수 있는 (원래 인코딩된 입력 데이터에 대한 주파수 변환된 계수들을 표현하는) 계수들의 세트를 재구성함으로써, 본 명세서에 설명된 기술의 인코딩 스킴에 대해 역으로 작업한다. 예를 들어, 계수들이 주파수 변환된 계수들의 세트를 표현할 때, 일 실시예에서, 디코딩 방법은 인코딩되었던 원래의 데이터 어레이를 (재)구성하기 위해 주파수 변환된 계수들에 대해 역 주파수 변환 오퍼레이션을 수행하는 단계를 포함한다.
일 실시예에서, 전술된 바와 같이, 인코딩된 데이터 스트림은 또한, 각각의 비트 평면 어레이 내에 (새롭게) 나타난 주파수 도메인 계수들에 대한 부호 값들, 및 또한 해당 비트 평면들 각각에 대한 정밀 비트 값들을 표시하는 데이터를 포함한다. 따라서, 일 실시예에서, 디코딩은, 고정된 크기의 패킷으로부터, 0이 아닌 비트 값이 주어진 비트 평면 어레이 내에 처음으로 나타난 주파수 도메인 계수들의 위치(들)를 결정하는 것뿐만 아니라, 이들 주파수 도메인 계수들에 대한 부호 값들을 결정하는 것을 포함한다. 일 실시예에서, 디코딩은 또한, 고정된 크기의 데이터 패킷 내에 인코딩된 비트 평면 시퀀스 내의 각각의 비트 평면에 대하여, 해당 비트 평면에 대한 정밀 값들(즉, 비트 평면 시퀀스 내의 이전의 비트 평면 내에 처음으로 나타났던 임의의 주파수 도메인 계수들에 대한 비트 값들)을 결정하는 것을 포함한다.
고정된 크기의 데이터 패킷으로의 인코딩은 손실이 있기 때문에, 적어도 일부 정보가 고정된 크기의 데이터 패킷 내에 포함되지 않은 일부 계수들이 있을 수 있다.
부호는 알려져 있지만 비트 값은 알려져 있지 않은(이 정보는 인코딩 동안 폐기되었기 때문임) 임의의 계수들의 경우, 실시예들에서, 디코딩 스킴은 비트 평면 시퀀스(여기서, 더 낮은 비트 평면이 이용가능함) 내의 아래의 다음 비트 평면 내의 그 포지션에 "1"을 도입한다(이는 알려져 있지 않은 비트 값에 대한 "1/2"의 기여를 효과적으로 추가함). 즉, 실시예들에서, 고정된 크기의 데이터 패킷 내에 포함되지 않지만 부호가 알려져 있는 주어진 비트 평면 어레이 내의 임의의 비트 값들의 경우, 디코딩은 (비트 평면 어레이들을 생성할 때) 비트 평면 어레이 내의 그 포지션에 0을 포함시키는 것, 및 비트 평면 시퀀스 내의 아래의 다음 비트 평면 내의 대응하는 포지션에 1을 포함시키는 것을 포함한다.
이는, (예컨대, 값을 "0"으로 간단히 디폴트(default)화하는 것과 비교하여) 더 양호한 품질 복원을 제공하는 것으로 밝혀졌다. 이어서, 이는, 예컨대, 미리결정된 디코딩 패턴에 따라, 시퀀스 내의 다른 비트 평면들에 대해 적합한 값들을 도입함으로써, 비트 평면 시퀀스 내의 더 낮은 비트 평면들을 거쳐 수행될 수 있다(여기서, 본 명세서에 설명된 기술의 인코딩이 비트 평면 시퀀스를 거쳐 아래쪽으로 작업하기 때문에, 비트 값들은 또한 통상적으로 알려져 있지 않을 것임). 예를 들어, (예컨대, 1XXXX의 값이 10101로 디코딩되도록(여기서, X는 알려져 있지 않은 비트 값을 표현함)) 디코딩은 시퀀스 내의 모든 다른 비트 평면에 "1"을 도입할 수 있다. 대안적으로, 아래의 다음 비트 평면 내의 대응하는 포지션에서의 알려져 있지 않은 비트 값에 대해 "1"을 도입한 후에, (예컨대, 1XXXX가 대신 10100으로서 디코딩되도록) 이어서 "0"이 더 낮은 비트 평면들 모두에 대해 도입될 수 있다. 다른 예로서, (예컨대, 1XXXXXXX가 10110100으로서 디코딩되도록) 디코딩은 (이용가능한 경우) n-1, n-2, 및 n-4 비트 평면들 내에 "1"을 도입할 수 있고, 이는 양호한 결과를 제공하는 것으로 밝혀졌다. 그러나, 다양한 다른 적합한 패턴들이 이러한 디코딩을 위해 사용될 수 있다는 것이 이해될 것이다.
한편, 부호 값이 알려져 있지 않은 임의의 계수들의 경우, 일 실시예에서, 그 계수에 대한 값은 0으로 디코딩되는데, 즉, 일 실시예에서, 그 계수에 대한 비트 값들은 비트 평면 시퀀스 내의 비트 평면들 각각에 대해 "0"으로 설정된다. 이러한 상황에서, (예컨대, 부호 값을 추측하려고, 또는 어떻게든 결정하려고 시도하기보다는) 계수 값을 "0"으로 설정하는 것이 더 양호할 수 있다. 즉, 실시예들에서, 고정된 크기의 데이터 패킷 내에 포함되지 않고 부호가 알려져 있지 않은 주어진 비트 평면 내의 임의의 비트 값들은 0으로 디코딩된다. 따라서, 예를 들어, 1XXXX의 비트 값(크기)을 갖지만 부호 값이 알려져 있지 않은 계수는 바로 "0"으로 디코딩된다.
대체적으로, 디코더는 데이터 스트림을 디코딩하여, 인코딩되었던 원래의 소스 데이터(예컨대, 이미지)를 복구하도록, 그리고 이어서, 이 데이터를 원하는 바에 따라 사용(예컨대, 디스플레이)하도록 동작가능하다. 따라서, 일단 데이터 스트림이 디코딩되었다면, 디코더는, 이어서, 디코딩된 독립적인 세그먼트들을 사용하여 획득된 데이터를 디스플레이하거나 디스플레이를 위해 출력하도록 구성될 수 있다.
위에서 논의된 인코딩 및 디코딩 장치들은 대체적으로 데이터 프로세싱 시스템의 일부로서 제공될 수 있다. 예를 들어, 장치들은 디지털 카메라, 모바일 폰 또는 태블릿과 같은, 카메라를 포함하는 이미지 및/또는 비디오 프로세싱 시스템의 일부를 포함할 수 있다.
대체적으로, 임의의 실시예에서, 본 명세서에 기술된 프로세스들은 임의의 원하는 그리고 적합한 장치에 의해 수행될 수 있다. 예를 들어, 임의의 실시예에서, 본 명세서에 기술된 프로세스들은 이미지 또는 비디오 프로세서(코덱)에 의해 수행될 수 있다. 따라서, 임의의 실시예에서, 본 명세서에 기술된 데이터 프로세싱 장치는 비디오 프로세서를 포함할 수 있거나, 또는 비디오 프로세서일 수 있다. 따라서, 임의의 실시예에서, 본 명세서에 기술된 프로세싱(인코딩/디코딩) 회로/회로부, 출력 회로/회로부, 헤더 생성 회로/회로부, 헤더 판독 회로/회로부 또는 입력 회로/회로부 등은 비디오 프로세서의 일부를 형성할 수 있다. 임의의 실시예에서, 본 명세서에 기술된 데이터 프로세싱 장치는 시스템 온 칩(system on chip, SoC)을 포함할 수 있거나, 시스템 온 칩일 수 있거나, 그의 일부를 형성할 수 있다.
당업자에 의해 이해되는 바와 같이, 본 명세서에 설명된 기술의 인코딩/디코딩 장치는, 예를 들어, 호스트(예컨대, 중앙) 프로세서를 포함하는 전체 데이터 프로세싱 시스템의 일부일 수 있다. 호스트 프로세서는, 예를 들어, 인코딩/디코딩 장치에 의한 데이터 프로세싱을 요구하는 애플리케이션들을 실행할 수 있다. 호스트 프로세서는 인코딩/디코딩 장치로 적절한 커맨드들 및 데이터를 전송하여, 데이터 인코딩/디코딩 오퍼레이션들을 수행하도록, 그리고 호스트 프로세서 상에서 실행되는 애플리케이션들에 의해 요구되는 출력을 생성하고/하거나 사용하도록 그것을 제어할 수 있다. 이를 용이하게 하기 위해, 호스트 프로세서는 인코딩/디코딩 장치를 위한 드라이버를 실행할 수 있다.
실시예들에서, 장치 또는 시스템은 본 명세서에 기술된 데이터를 저장하고/하거나 본 명세서에 기술된 프로세스들을 수행하기 위한 소프트웨어를 저장하는 하나 이상의 메모리들 및/또는 메모리 디바이스들을 포함할 수 있고/있거나 그들과 통신할 수 있다. 장치 또는 시스템은 어레이들의 데이터 요소들에 기초하여 이미지들을 디스플레이하기 위한 디스플레이를 포함할 수 있고/있거나 그와 통신할 수 있다. 장치 또는 시스템은 데이터 요소들의 어레이들을 생성하는 카메라를 포함할 수 있고/있거나 그와 통신할 수 있다.
본 명세서에서 언급되는 메모리는 데이터 프로세싱 장치의 또는 그를 위한 임의의 원하는 그리고 적합한 메모리일 수 있다. 메모리는 데이터 프로세싱 장치, 예컨대 비디오 프로세서 및/또는 시스템 온 칩(SoC)의 외부에 있을 수 있다. 메모리는, 예를 들어 메인 시스템 메모리일 수 있다.
본 명세서에 설명된 기술은 디스플레이할 이미지들 또는 프레임들과 같은, 데이터 프로세싱 장치가 제공할 수 있고/있거나 사용할 수 있는 모든 형태의 데이터 어레이들에 사용될 수 있다. 따라서, 위에서 나타낸 바와 같이, 데이터 요소들의 어레이들은 이미지 데이터를 포함할 수 있고/있거나 이미지 데이터의 프레임들 또는 이미지들에 대응할 수 있다.
일 실시예에서, 본 명세서에 설명된 기술의 다양한 기능들은 데이터 요소들의 어레이들을 제공하고/하거나 사용하는 단일 데이터(예컨대, 이미지) 프로세싱 플랫폼 상에서 수행된다.
본 명세서에 설명된 기술은 적합하게 구성된 컴퓨터 또는 마이크로-프로세서 기반 시스템과 같은 임의의 적합한 시스템에서 구현될 수 있다. 일 실시예에서, 본 명세서에 설명된 기술은 컴퓨터 및/또는 마이크로-프로세서 기반 시스템에서 구현된다.
본 명세서에 설명된 기술의 다양한 기능들은 임의의 원하는 그리고 적합한 방식으로 수행될 수 있다. 예를 들어, 본 명세서에 설명된 기술의 단계들 및 기능들은 원하는 바에 따라 하드웨어 또는 소프트웨어로 구현될 수 있다. 따라서, 예를 들어, 달리 나타내지 않는 한, 본 명세서에 설명된 기술의 다양한 회로들/회로부, 기능 요소들, 스테이지들, 및 "수단들"은, 원하는 방식으로 동작하도록 프로그래밍될 수 있는 적절하게 전용되는 하드웨어 요소들(프로세싱 회로들/회로부) 및/또는 프로그래밍가능 하드웨어 요소들(프로세싱 회로들/회로부)과 같은, 다양한 단계들 또는 기능들 등을 수행하도록 동작가능한 적합한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛들, 회로들/회로부, 프로세싱 로직, 마이크로프로세서 배열체들 등을 포함할 수 있다.
특히, 인코더는 원하는 바에 따라 하드웨어 또는 소프트웨어로 구현될 수 있다고 고려된다. 따라서, 예를 들어, 인코더는, 원하는 방식으로 동작하도록 프로그래밍될 수 있는 적절하게 전용되는 하드웨어 요소들(프로세싱 회로들/회로부) 및/또는 프로그래밍가능 하드웨어 요소들(프로세싱 회로들/회로부)과 같이 본 명세서에 기술된 바와 같은, 다양한 인코딩 단계들 또는 기능들 등을 수행하도록 동작가능한 적합한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛들, (인코딩) 회로들/회로부, 프로세싱 로직, 마이크로프로세서 배열체들 등을 포함할 수 있다.
유사하게, 디코더는 원하는 바에 따라 하드웨어 또는 소프트웨어로 구현될 수 있다. 따라서, 예를 들어, 디코더는 원하는 방식으로 동작하도록 프로그래밍될 수 있는 적절하게 전용되는 하드웨어 요소들(프로세싱 회로들/회로부) 및/또는 프로그래밍가능 하드웨어 요소들(프로세싱 회로들/회로부)과 같이 본 명세서에 기술된 바와 같은, 다양한 인코딩 단계들 또는 기능들 등을 수행하도록 동작가능한 적합한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛들, (디코딩) 회로들/회로부, 프로세싱 로직, 마이크로프로세서 배열체들 등을 포함할 수 있다.
본 명세서에 설명된 기술의 다양한 단계들 또는 기능들 등은 주어진 프로세서 상에서 복제되고/되거나 병렬로 수행될 수 있다. 동등하게, 다양한 프로세싱 스테이지들은, 원하는 경우, 프로세싱 회로들/회로부 등을 공유할 수 있다.
위에서 논의된 특정 단계들 또는 기능들 등을 수행하는 데 필요한 임의의 하드웨어에 따라, 시스템은 달리, 데이터 프로세싱 장치 및/또는 시스템들이 포함하는 통상의 기능 유닛들 등 중 임의의 하나 이상 또는 전부를 포함할 수 있다.
따라서, 다양한 데이터 프로세싱 스테이지들이 원하는 바에 따라 그리고 임의의 적합한 방식으로 구현될 수 있고, 임의의 원하는 그리고 적합한 기능들을 각각 수행할 수 있다. 유사하게, 다양한 데이터가 임의의 적합한 그리고 원하는 방식으로 정의 및 저장될 수 있다.
또한, 본 명세서에 설명된 기술의 설명된 실시예들 모두가 본 명세서에 설명된 특징들 중 임의의 하나 이상 또는 전부를 적절히 포함할 수 있다는(그리고 일 실시예에서, 포함한다는) 것이 당업자에 의해 이해될 것이다.
본 명세서에 설명된 기술에 따른 방법들은 적어도 부분적으로 소프트웨어, 예컨대 컴퓨터 프로그램들을 이용하여 구현될 수 있다. 따라서, 본 명세서에 설명된 기술의 추가의 실시예들은 데이터 프로세서 상에 설치될 때 본 명세서에 기술된 방법들을 수행하도록 특별히 구성된 컴퓨터 소프트웨어, 프로그램 요소가 데이터 프로세서 상에서 실행될 때 본 명세서에 기술된 방법들을 수행하기 위한 컴퓨터 소프트웨어 코드 부분들을 포함하는 컴퓨터 프로그램 요소, 및 프로그램이 데이터 프로세서 상에서 실행될 때 본 명세서에 기술된 방법들 또는 방법의 모든 단계들을 수행하도록 구성된 코드를 포함하는 컴퓨터 프로그램을 포함한다. 데이터 프로세서는 마이크로프로세서 시스템, 프로그래밍가능 FPGA(field programmable gate array) 등일 수 있다.
본 명세서에 설명된 기술은 또한, 데이터 프로세서를 포함하는 데이터 프로세싱 장치 또는 시스템을 동작시키는 데 사용될 때, 상기 데이터 프로세서와 연계하여 상기 장치 또는 시스템으로 하여금 본 명세서에 설명된 기술의 방법들의 단계들을 수행하게 하는 그러한 소프트웨어를 포함하는 컴퓨터 소프트웨어 캐리어까지 확장된다. 그러한 컴퓨터 소프트웨어 캐리어는 ROM 칩, CD ROM, RAM, 플래시 메모리, 또는 디스크와 같은 물리적 저장 매체일 수 있거나, 또는 와이어들을 통한 전자 신호, 광학 신호, 또는 예컨대 위성 등에 대한 무선 신호와 같은 신호일 수 있다.
본 명세서에 설명된 기술의 방법들의 모든 단계들이 컴퓨터 소프트웨어에 의해 수행되어야 하는 것은 아니고, 따라서 추가의 실시예들에서, 컴퓨터 소프트웨어, 및 본 명세서에 기재된 방법들의 단계들 중 적어도 하나를 수행하기 위하여 컴퓨터 소프트웨어 캐리어 상에 설치된 그러한 소프트웨어를 포함함이 추가로 이해될 것이다.
본 명세서에 설명된 기술은 그에 따라 컴퓨터 시스템과 함께 사용하기 위한 컴퓨터 프로그램 제품으로서 적합하게 구현될 수 있다. 그러한 구현예는 컴퓨터 판독가능 매체, 예를 들어, 디스켓, CD, DVD, ROM, RAM, 플래시 메모리, 또는 하드 디스크와 같은 유형적(tangible) 비일시적 매체 상에 고정된 일련의 컴퓨터 판독가능 명령어들을 포함할 수 있다. 그것은, 또한, 광학 또는 아날로그 통신 라인들을 포함하지만 이들로 제한되지 않는 유형적 매체를 통해, 또는 마이크로파, 적외선 또는 다른 송신 기법들을 포함하지만 이들로 제한되지 않는 무선 기법들을 사용하여 무형적으로, 모뎀 또는 다른 인터페이스 디바이스를 경유하여 컴퓨터 시스템으로 송신가능한 일련의 컴퓨터 판독가능 명령어들을 포함할 수 있다. 일련의 컴퓨터 판독가능 명령어들은 이전에 본 명세서에 기술된 기능의 전부 또는 일부를 구현한다.
당업자는 그러한 컴퓨터 판독가능 명령어들이 많은 컴퓨터 아키텍처들 또는 운영 체제들과 함께 사용하기 위한 다수의 프로그래밍 언어들로 기록될 수 있음을 이해할 것이다. 또한, 그러한 명령어들은 반도체, 자기, 또는 광학을 포함하지만 이에 한정되지 않는 현재 또는 미래의 임의의 메모리 기술을 이용하여 저장될 수 있거나, 또는 광학, 적외선, 또는 마이크로파를 포함하지만 이에 한정되지 않는 현재 또는 미래의, 본 명세서에 설명된 임의의 통신 기술을 이용하여 송신될 수 있다. 그러한 컴퓨터 프로그램 제품은, 인쇄형 또는 전자적 문서화를 동반하는 제거가능한 매체, 예를 들어 수축 포장형 소프트웨어(shrink wrapped software)로서 분배될 수 있거나, 컴퓨터 시스템, 예를 들어 온 시스템(on a system) ROM 또는 고정 디스크가 프리-로드(pre-load)될 수 있거나, 또는 네트워크, 예를 들어 인터넷 또는 월드와이드웹을 통해 서버 또는 전자 게시판으로부터 분배될 수 있다는 것이 고려된다.
도 1은 본 명세서에 설명된 기술의 방식으로 인코딩되었던, 디스플레이할 이미지들 또는 비디오 프레임들과 같은, 데이터 어레이들을 제공하고 사용할 수 있는 데이터 프로세싱 시스템(200)의 일 실시예를 개략적으로 도시한다. 도 1은 단지 본 명세서에 설명된 기술과 함께 사용하기에 적합한 시스템의 일례를 도시하며, 다양한 다른 배열들이 가능하다는 것이 이해될 것이다.
이러한 실시예에서, 시스템(2000)은 시스템 온 칩(SoC)(2020) 형태의 데이터 프로세싱 장치를 포함한다. 시스템(2000)은 또한, 오프-칩(off-chip) (메인) 메모리(2160), 디스플레이 디바이스(2180) 및 비디오 카메라(2200)를 포함한다.
SoC(2020)는 중앙 처리 장치(central processing unit, CPU)(2040), 그래픽 프로세싱 유닛(graphics processing unit, GPU)(2060), 이미지/비디오 프로세서(2080), 디스플레이 제어기(2100), 상호접속부(2120) 및 메모리 제어기(2140)를 포함한다.
도 1에 도시된 바와 같이, CPU(2040), GPU(2060), 이미지/비디오 프로세서(2080), 및 디스플레이 제어기(2100)는 상호접속부(2120)를 통해 서로 통신하고, 상호접속부(2120) 및 메모리 제어기(2140)를 통해 메모리(2160)와 통신한다. 디스플레이 제어기(2100)는 또한 디스플레이 디바이스(2180)와 통신한다. 비디오 카메라(2200)는 또한 상호접속부(2120)를 통해 SoC(2020)와 통신한다.
실시예들에서, 이미지/비디오 프로세서(2080)는 메모리(2160)로부터 이미지 데이터를 판독하고, (예컨대, 본 명세서에 설명된 기술의 방식으로) 이미지 데이터를 인코딩하고, 그리고 이어서, 예컨대 메모리(2160)에 저장하기 위해 또는 다른 디바이스로 스트리밍하기 위해 그 인코딩된 이미지 데이터를 출력한다. 인코딩된 이미지 데이터는 나중에, 예컨대 이미지/비디오 프로세서(2080)에 의해 검색되고 디코딩되거나, 다른 디바이스에 의해 수신되고 디코딩될 수 있다. 이어서, 디코딩된 이미지 데이터는 디스플레이를 위해, 예컨대, 디스플레이 제어기(2100)에 의해 디스플레이 디바이스(2180)로 또는 다른 디바이스에 의해 출력될 수 있다.
따라서, 그러한 데이터 프로세싱 시스템들 내에서, 프로세싱되고 있는 이미지 데이터를 압축할 수 있는 것이 다양한 지점들에서 바람직할 수 있다. 추가로, 예컨대 더 높은 대역폭 미디어 애플리케이션들에 대해, 더 높은 처리량을 용이하게 할 수 있기 위해, 주어진 대역폭(비트 비율)을 보장할 수 있는 것이 바람직할 수 있다.
따라서, 실시예들에서, 본 명세서에 설명된 기술은 이미지 데이터를 고정된 크기를 갖는 데이터 패킷에 인코딩하고, 이에 따라 원하는 비트 비율을 보장할 수 있는 인코딩 스킴에 관한 것이다. 예를 들어, 도 2는 본 명세서에 설명된 기술의 실시예에 따른 고정된 비율의 인코딩 스킴을 개략적으로 예시한다. 특히, 도 2에 도시된 예에서, 입력은 인코딩될 픽셀들의 8 × 8 블록(10)(예컨대, 64 바이트)이다. 이는, 예를 들어, 단일 블록의 이미지 데이터를 표현할 수 있어서, 이에 따라 픽셀들의 배열은 그 블록 내의 이미지 데이터의 공간 분포를 표현한다.
초기 압축 중 일부를 제공하기 위해, 이산 코사인 변환(DCT) 또는 이와 유사한 것과 같은 공간-주파수 변환이 이러한 블록(10)에 적용되어(단계 101), 부호화된 주파수 변환된 계수들의 대응하는 8 × 8 블록(12)이 생성된다. 이어서, 주파수 변환된 계수들의 블록(12)은 비트 평면 기반 엔트로피 코딩을 사용하여 (예컨대, 1/2 비율 인코딩의 경우, 32 바이트의) 고정된 크기의 데이터 패킷(14)으로 인코딩된다(단계 102). 이는, 추가로 후술되는 바와 같이, 이미지 데이터가 데이터 패킷(14)에 대한 원하는 고정된 크기를 여전히 보장하면서 효율적으로 압축되는 그러한 방식으로 수행된다.
도 2가 픽셀들의 8 × 8 블록(10)을 도시하지만, 본 명세서에 설명된 기술은 데이터 요소들의 임의의 적합한 어레이에 적용될 수 있다는 것이 이해될 것이다. 예를 들어, 본 명세서에 설명된 기술의 인코딩 스킴을 예시하기 위해, 도 3a에 도시된 계수들의 4 × 4 블록과 관련하여 작업 예가 이제 설명될 것이다. 그러나, (예컨대, 용이한 예시를 위해) 계수들의 4 × 4 블록이 선택되지만, 본 명세서에 설명된 기술은 임의의 특정 크기 또는 형태의 데이터 어레이로 제한되지 않는다는 것이 이해될 것이다.
도 3a는 (절대값들이 6 비트를 사용하여 저장되도록) -63 내지 +63 범위 내의 부호화된 값들의 4 × 4 어레이를 포함하는 (즉, 도 2의 단계 101로부터 획득된) 주파수 도메인 계수들의 전형적인 블록의 예를 도시한다. 본 명세서에 설명된 기술은, 이어서, 이들 계수들을 고정된 크기의 데이터 패킷으로서 인코딩할 수 있다.
이를 위해, 계수들은 먼저 일련의 비트 평면 어레이들로서 표현되는데, 이때 각각의 비트 평면 어레이는 비트 평면 어레이가 표현하는 각자의 비트 포지션에서의 주파수 도메인 계수들 각각에 대한 비트 값들(즉, "1" 또는 "0")을 표현한다. 즉, 절대값들은 도 3b에 도시된 바와 같은 6개의 이진 비트 평면들의 세트로 분해된다.
이어서, 비트 평면 어레이들의 세트는 원하는 데이터 패킷 크기에 도달할 때까지 상부 비트 평면으로부터 아래쪽으로 작업하는 순서로 인코딩된다. 즉, 본 명세서에 설명된 기술은 비트 평면들 각각을 차례로 인코딩하도록 진행하고, 따라서, 데이터 패킷 내에 이용가능한 공간이 있다면, 주어진 비트 평면은 다음 비트 평면으로 이동하기 전에 완전히 인코딩되는 등이 행해진다. 그러나, 데이터 패킷이 가득 찬 경우, 인코딩은 중지되며, 이때 아직 인코딩되지 않은 임의의 비트들(및 비트 평면들)은 데이터 패킷 내에 포함되지 않는다. 이러한 방식으로, 데이터 패킷이 원하는 고정된 크기를 초과하지 않는 것이 보장될 수 있다. 추가로, 인코딩 스킴이 상부 비트 평면으로부터 아래쪽으로 작업하기 때문에, 이것은, 상위 비트 평면들이 하위 비트들을 표현하는 비트 평면들보다 먼저 우선적으로 인코딩되는 것을 보장하며, 따라서, (그 정보가 데이터 패킷 내에 포함되기 전에 인코딩이 중지됨으로 인해) 정보가 손실된 경우, 더 높은 비트 평면들 내의 정보는 여전히 인코딩된다.
종종, 최고 비트 평면들은 비어 있을 수 있다("0"들만을 포함함). 예를 들어, 이는 2개의 최고 비트 평면들에 대한 도 3b의 경우이다. 이러한 정보는, 0이 아닌 값을 포함하는 제1 비트 평면(제1의 "활성인" 비트 평면)에 도달할 때까지 이어지는 비트 평면들의 시퀀스 내의 각각의 그러한 "비활성" (빈) 계층에 대해 데이터 패킷 내에 "0"을 간단히 포함시킴으로써 효율적으로 인코딩될 수 있다. 제1의 그러한 "활성인" 비트 평면에 도달할 때, 이는, 예컨대 "1"을 포함시킴으로써 표시될 수 있다. 일단 비트 평면 시퀀스 내의 제1의 활성인 비트 평면의 포지션이 이러한 방식으로 식별되면, 제1의 활성인 비트 평면으로부터 시작하는 비트 평면들 각각은, 예컨대 후술되는 바와 같이, 본 명세서에 설명된 기술의 특정 인코딩 스킴에 따라 인코딩될 수 있다.
따라서, 도 4에 도시된 바와 같이, 인코딩은 제1 활성 계층을 시그널링함으로써 시작된다(단계 401). 예를 들어, 최고 비트 평면으로부터 아래쪽으로 비트 평면들의 시퀀스를 거쳐 작업하면서, 각각의 비활성 계층에 대해서는 '0'이 전송되고, 이어서, 제1 활성 계층에 대해서는 '1'이 전송된다. 예를 들어, 도 3b에 도시된 비트 평면들의 세트의 경우, 처음 2개의 비트 평면들('비트 평면 5' 및 '비트 평면 4')은 비어 있고, 제1 활성 계층은 ('13'의 절대값을 갖고, 이에 따라 이진 표현으로 '001101'을 갖는) 좌측 상부 값에 대해 최상위 비트를 포함하는 '비트 평면 3'이다. 따라서, 이러한 정보는 코드의 시작 부분에 값들 '001'(즉, 처음 2개의 비트 평면들은 비어 있고 비트 평면 시퀀스 내의 제3 비트 평면은 제1의 활성인 비트 평면임을 표시함)을 포함시킴으로써 인코딩될 수 있다.
이어서, 도 4에 도시된 인코딩 스킴은, 데이터 패킷이 가득 찰 때까지(원하는 고정된 데이터 패킷 크기에 도달할 때까지), 제1의 활성인 비트 평면으로부터 각각의 비트 평면(계층)을 차례로 아래쪽으로 인코딩함으로써 진행한다(단계 402). 따라서, 도 3b에 도시된 예의 경우, '비트 평면 3'이 제1의 활성인 비트 평면이라고 시그널링한 후에, 인코딩 스킴은 이어서, 그 비트 평면에 대한 비트 값들을 인코딩하도록 진행하고, 그리고 이어서, 데이터 패킷이 가득 찰 때까지(또는 이 시점까지 원하는 고정된 데이터 패킷 크기에 도달하지 않았으면, 모든 비트 평면들이 인코딩될 때까지) 다음 비트 평면('비트 평면 2')으로 아래로 이동하는 등을 하여, 비트 평면들 각각을 인코딩한다.
본 명세서에 설명된 기술의 특정 인코딩 스킴은, 계수들의 개별적인 위치들까지 아래로, 반복적으로 비트 평면을 섹션들(예컨대, 사분면들)로 세분하고 계수의 최상위 비트를 새롭게 포함하는 임의의 섹션들을 식별함으로써 등을 행함으로써 재귀적인 방식으로 비트 평면 내의 임의의 새롭게 "활성인" 계수들의 위치들을 인코딩한다. 또한, 각각의 비트 평면 내의 정보는 시퀀스 내의 선행 비트 평면 내의 정보에 관련하여 인코딩된다. 본 출원인은 이러한 인코딩 스킴이, 고정된 비트 비율을 여전히 보장하면서, 특히 효율적인 방식으로 데이터를 압축할 수 있다고 믿는다. 특히, 이러한 인코딩 스킴은, 주파수 도메인에서 이미지 데이터를 프로세싱할 때 종종 발견되는 다수의 선두 "0들"을 효율적으로 압축할 수 있다.
도 5는 (예컨대, 도 3b에 도시된 유형의) 4 × 4 비트 평면 어레이를 포함하는 특정 비트 평면에 대한 인코딩 스킴을 예시한다. 도 5에 도시된 바와 같이, 인코딩되고 있는 각각의 비트 평면 어레이에 대해, 비트 평면 어레이는 먼저 4개의 2 × 2 사분면들로 분할되고, 이어서, 그 비트 평면 내의 "새롭게 활성인" 임의의 사분면들이 시그널링된다(단계 501). (비트 평면 시퀀스 내에서 처음으로 사분면이 0이 아닌 비트 값을 포함하는 경우, 그 사분면은 비트 평면에서 "새롭게 활성"이 된다.) 일단 사분면이 활성이 되면, 그것은 비트 평면 시퀀스 내의 후속 비트 평면들의 인코딩 동안 활성으로 유지된다.
따라서, 비트 평면 어레이 내의 각각의 현재 활성인 사분면(그 비트 평면 내의 새롭게 활성인 임의의 사분면들뿐만 아니라 비트 평면 시퀀스 내의 이전 비트 평면 어레이의 인코딩 동안 이전에 "활성화된" 임의의 사분면들을 포함함)에 대해(단계 502), 그리고 데이터 패킷 내에 여전히 이용가능한 공간이 있는 한(그렇지 않으면, 일단 원하는 고정된 크기에 도달하면 인코딩이 중지됨), 그 사분면 내의 임의의 새롭게 활성인 계수들의 위치(들)가 시그널링될(단계 502a)뿐만 아니라, 임의의 그러한 새롭게 활성인 계수들에 대한 각자의 부호 비트들이 시그널링된다(단계 502b). (부호 비트들은 적합하게 할당된 값을 사용하여, 예컨대, 부호 ≥ 0인 경우에는 "0"을 전송하고 부호 < 0인 경우에는 "1"을 전송함으로써 (또는 그와 유사하게) 표시될 수 있다.) 마지막으로, 일단 임의의 새롭게 활성인 계수들에 대한 위치(들) 및 부호 비트들이 각각의 활성인 사분면에 대해 전송되었으면, 더 높은 비트 평면 내의 이미 활성화된 임의의 계수들에 대한 원시 (절대) 비트 값들을 표현하는 소위 "정밀 비트들"이 전송된다(단계 503).
따라서, 각각의 비트 평면에 대해, 데이터 패킷 내에 이용가능한 공간이 있는 한, 비트 평면 내의 새롭게 활성인 임의의 계수들의 위치(들)(즉, 선두 비트("1")가 비트 평면에 의해 표현되는 비트 포지션에 나타남)뿐만 아니라 그의 부호 값들, 그리고 또한, 이전 평면 내에서 선두 비트가 나타났던 임의의 계수들에 대한 원시 (절대) 비트 값들(따라서 선두 비트를 따르는 값들)을 표시하는 데이터가 데이터 패킷 내에 포함된다.
새롭게 활성인 사분면들 및 계수들의 위치(들)를 시그널링하기 위한 실시예들에서 사용될 수 있는 예시적인 가변 길이 코드가 아래의 표 1에 제시되어 있다. 이러한 코드는 상황 의존적이므로, 임의의 새롭게 활성인 계수들을 포함하는 각각의 사분면(또는 서브-사분면, 또는 개별적인 데이터 요소)에 대해, 이러한 정보는 위의 계층 내에 유효 비트들을 포함한다고 알려진 위치들의 수에 기초하여 시그널링될 수 있다. 따라서, 비교적 복잡한 비트 의존성들이, 아래 표 1에 제시된 것과 같은 비교적 낮은 비용 (낮은 복잡성) 가변 길이 코드 표를 사용하여, 비교적 간단한 방식으로 인코딩될 수 있다. 또 다시, 이는 대체적으로, 데이터 값들을 더 효율적으로 압축하는 효과를 갖는다.
[표 1]
도 6은 도 3b에 예시된 비트 평면 어레이들의 세트가 표 1에 제시된 가변 길이 코딩 스킴을 사용하여 어떻게 인코딩될 수 있는지를 도시하는 작업 예이다.
예를 들어, 전술된 바와 같이, 인코딩은, 이 예에서 '비트 평면 3'인 제1의 활성인 비트 평면으로 시작한다. 좌측 상부 코너로부터 시계 방향으로 작업하여, '비트 평면 3'의 제1의 2 × 2 사분면(좌측 상위)이 0이 아닌 계수를 포함하는 반면, 다른 사분면들은 모두 비어 있는 것을 알 수 있다. 따라서, 제1 (좌측 상위) 계수가, 예컨대, (선행 계층 내에 활성인 사분면들이 없으므로) 상기 표 1에 나타낸 바와 같이, "0"을 전송함으로써, "활성인" 것으로 시그널링된다(단계 501).
이어서, 전술된 바와 같이, 인코딩 스킴은 이러한 제1의 활성인 사분면을 또 다시 그의 4개의 개별적인 데이터 요소들(각각은 단일 계수를 표현함)로 세분하도록 진행한다. 여기서, 제1의 활성인 사분면 내에서, 제1 (좌측 상위) 계수가 활성이므로(반면, 다른 것들은 비어 있음), 추가의 '0'이 코드에 추가된다는 것을 알 수 있다(단계 502a).
이러한 계수의 부호는 포지티브이므로, 다른 '0'이 부호 값을 표시하기 위해 추가된다(단계 502b).
그러나, ('비트 평면 3'이 제1의 활성인 비트 평면이어서, 위의 계층으로부터의 값들이 없기 때문에) 이러한 스테이지에서는 정밀 비트들이 없으며, 이에 따라 이러한 스테이지에서의 코드는 다음과 같다:
'001' ('비트 평면 3'이 제1 활성 계층이라는 것을 시그널링함)
'000' (이러한 비트 평면 내에서, 제1 계수가 활성이고 포지티브 부호를 갖는다는 것을 시그널링함).
이어서, 인코딩 스킴은 다음 비트 평면('비트 평면 2')으로 이동하고, 그것을 동일한 방식으로 인코딩하도록 진행한다. 예를 들어, '비트 평면 2'의 경우, 제2 사분면(좌측 하부)이 이제 활성이고, 따라서 이는 그에 따라, 예컨대, '1100'으로서 시그널링된다는 것을 알 수 있다. 제1 사분면(이미 활성임) 내에는 새로운 계수들이 없으므로, 이를 표시하기 위해 이어서 '0'이 전송된다. 그러나, 제2 사분면의 제4 계수는 활성이고, 이는 '111000'으로서 시그널링될 수 있다. 이러한 새로운 계수의 부호가 네거티브이므로, '1'이 부호 값으로서 추가되고, 제1 계수에 대한 정밀 비트 '1'이 마지막으로 추가된다(단계 503). 이 스테이지에서의 코드는 이제 다음과 같다:
'001' '000'('비트 평면 3'의 인코딩으로부터)
'1100' '0' '111000' '1' '1'('비트 평면 2'의 인코딩으로부터).
이어서, 인코딩은 최종 2개의 비트 평면들에 대해 (또는 적어도 데이터 패킷이 가득 찰 때까지) 반복될 수 있다.
따라서, '비트 평면 1'의 경우, 새로운 블록이 활성이고, '10'이 코드에 추가된다. 제1 사분면(좌측 상위) 내에는 새롭게 활성인 계수들이 없으므로, '0'이 전송되지만, 제2 사분면(우측 상위)에서의 처음 2개의 계수들이 이제 활성이므로, '101'이 코드에 추가된다. 이어서, 이들 계수들에 대한 부호 값들(이들은 둘 모두가 포지티브이기 때문에, '00')이 추가되고, 이어서 추가의 '0'이 전송되어, 제3 사분면(좌측 하부) 내에 새롭게 활성인 계수들이 없다는 것을 표시한다. 2개의 이미 활성인 계수들에 대한 정밀 비트 값들('00')이 전송된다.
마지막으로, '비트 평면 0'의 경우, 나머지 블록(우측 하부)이 이제 활성이고, 이는 '1'을 코드에 추가함으로써 시그널링된다. 이어서, 제1 사분면 내의 2개의 새롭게 활성인 계수들에 대한 포지션들 및 부호 값들이 추가되고('1101' '10'), 뒤이어 제2 사분면 내에서 변경이 없다는 표시('0'), 그리고 이어서, 제3 사분면 내의 새로운 계수에 대한 포지션 및 부호 값('10' '0'), 및 최종 사분면 내의 새로운 계수의 포지션('11000')이 추가된다. 이어서, 이전 비트 평면들 내에서 활성화된 4개의 계수들에 대한 정밀 비트들('1011')이 추가된다.
따라서, 이러한 방식으로, 각각의 비트 평면에 대한 정보를 상황 의존적 방식으로 인코딩함으로써 - 여기서, 각각의 비트 평면에 대한 정보는 선행 계층으로부터의 정보에 기초하여 인코딩됨 -, 비교적 복잡한 유효 비트 의존성들이 효율적으로 그리고 비교적 간단한 가변 길이 코드를 사용하여 인코딩될 수 있다. 표 1에 나타낸 코드는 좌측 상부 코너에서 처음 나타난 새로운 계수들을 향해 바이어스되고, 이는 전형적으로 주파수 변환 후의 경우일 것임을 또한 알 수 있다. 그러나, 다른 적합한 코딩 스킴들이 물론 사용될 수 있다.
상기에 제시된 예는 4 × 4 어레이를 인코딩하는 것에 대한 것이다. 그러나, 인코딩 스킴이 물론, 다른 (더 큰) 어레이들에 또한 사용될 수 있다는 것이 이해될 것이다. 예를 들어, 도 7은 데이터 요소들의 8 × 8 어레이를 인코딩하는 예를 도시한다. 이러한 경우에, 인코딩될 각각의 비트 평면 어레이에 대해, 코드는 어느 4 × 4 블록들(사분면들)이 새롭게 활성인지를 먼저 시그널링하고, 이어서 각각의 4 × 4 블록에 대하여, (좌측 상부로부터 시계 방향으로 작업하여) 4 × 4 블록들에 대한 계수들의 위치들 및 부호들을 인코딩하도록 진행된다(즉, 단계들 501 및 502). 마지막으로, 정밀 비트들이 4 × 4 블록들 각각에 대해 순서대로 인코딩된다(단계 503). 이어서, 데이터 패킷이 가득 찰 때까지, 인코딩은 다음 비트 평면으로 아래로 이동하는 등을 행한다.
또한, 인코딩 스킴이 다중-평면 인코딩에 사용될 수 있다는 것이 이해될 것이다. 예를 들어, 이는 각각의 데이터 요소가 다수의 채널들(예컨대, YUV 값들)과 연관되는 경우일 수 있다. 이러한 경우에, 도 8에 도시된 바와 같이, 채널들 각각에 대해 하나씩, 비트 평면 어레이들의 3개의 세트들이 있을 수 있다. 이러한 경우에, 일 실시예에서, 3개의 평면들에 대한 비트 평면 어레이들은 인터리빙된 방식으로 인코딩되어, 일 실시예에서, 각각의 채널에 대한 새롭게 활성인 비트들의 위치들이 각각의 데이터 채널에 대한 정밀 비트들을 인코딩하기 전에 연달아 인코딩되게 한다.
도 9는 인코딩 프로세스 동안의 데이터 흐름을 도시하는 흐름도이다. 입력은 m 비트 데이터 패킷 내로 압축될 n개의 비트 평면들((n-1), (n-2),..., 1, 0으로 번호가 매겨짐)의 세트이다. 상부 레벨에서, 인코딩 프로세스는 상부 비트 평면(n-1)으로부터 아래쪽으로 작업하고, 데이터 패킷이 가득 찰 때까지 비트 평면들 각각을 차례로 인코딩한다. 각각의 비트 평면의 인코딩은, 전술된 것과 동일한 방식으로, 비트 평면을 복수의 사분면들로 세분하고, 임의의 새롭게 활성인 계수들뿐만 아니라 그들의 부호 비트들, 및 이전에 활성인 계수들에 대한 정밀 비트들을 표시함으로써 작업한다.
따라서, 본 명세서에 설명된 기술의 인코딩은, 일 실시예에서, 고정된 크기의 데이터 패킷들의 시퀀스(예컨대, 각각은 데이터 요소들의 어레이(또는 블록)를 표현함)를 포함하는 데이터 스트림을 생성한다. 인코더에 의해 생성된 인코딩된 데이터 스트림은 (예컨대, 후속 디코딩 및/또는 송신을 위해) 저장을 위해 메모리로 출력될 수 있거나, 또는 (예컨대, 후속 디코딩 및 선택적으로 디스플레이를 위해) 외부 디바이스로 출력될 수 있다.
예를 들어, 인코딩된 데이터 스트림은 이어서, 본질적으로 전술된 인코딩 스킴의 역 프로세스에 의해 디코딩될 수 있다. 예를 들어, 도 10은 본 명세서에 설명된 기술의 일 실시예에 따른 디코딩 프로세스를 개략적으로 예시하는데, 여기서, 고정된 크기의 데이터 패킷(24)(예컨대, 32 바이트)이 라운딩 삽입으로 엔트로피 디코딩되어(단계 201), 부호화된 주파수 도메인 계수들의 8 × 8 블록(22)을 (재)구성하고, 이어서 이것에 역 주파수-공간 변환이 적용되어(단계 202), 픽셀들의 8 × 8 블록(20)(즉, 고정된 크기의 데이터 패킷으로 인코딩되었던 원래의 입력 데이터)을 재구성한다. 도 10은 본질적으로, 도 2에 예시된 인코딩 스킴의 역 프로세스를 도시한다. 따라서, 도 10이 픽셀들의 8 × 8 블록의 형태로 디코딩된 출력을 생성하는 예를 도시하지만, 디코딩 스킴은, 원하는 바에 따라, 임의의 다른 적합하게 인코딩된 데이터 스트림에 적용될 수 있다는 것이 이해될 것이다.
따라서, 디코딩 프로세스는, 비트 평면들 각각 내의 새롭게 활성인 계수들의 위치들 및 부호들을 식별하기 위해 고정된 크기의 데이터 패킷을 판독하고, 이어서 비트 평면들을 함께 조합하여, 원래의 입력을 획득하기 위해 공간 도메인으로 다시 변환될 수 있는 계수들의 세트를 생성함으로써 시작한다. 자연스럽게, 인코딩 스킴이 손실이 있기 때문에(그리고 원하는 고정된 크기에 도달할 때 중지하기 때문에), 비트 평면들 각각에 대한 모든 정보가 고정된 크기의 데이터 패킷에서 이용가능하지는 않을 것이다.
예를 들어, 도 11은 4 × 4 블록에 대한 도 10에 제시된 스킴에 따른 디코드 프로세스의 예를 예시한다. 특히, 도 11은, 예컨대 전술된 바와 같이, 고정된 크기의 데이터 패킷으로부터 디코딩된 6개의 비트 평면들의 세트(1100)를 도시한다. 그러나, '비트 평면 1' 및 '비트 평면 0'의 경우, 고정된 크기의 데이터 패킷에 인코딩되지 않았던 일부 정보가 있다. 이들 계수들은 'X'로 표시된다.
계수들의 세트(1102)를 재구성하기 위해, 알려져 있지 않은 값들('X'들)을 0으로 간단히 설정하기 보다는, 적어도 부호 값이 알려져 있는 경우, 아래 계층에 '1'을 삽입한다. 따라서, '11XX'로 인코딩되는 좌측 상부 계수에 대해, 이는 '13'의 값이 할당된다(즉,'1100'+'0001'). 유사하게, 계수 '1XX'에는 '5'의 절대값('101')이 할당된다. 계수 '1X'에는, 더 낮은 계층이 없기 때문에, '2'의 값('10')이 할당된다. 이는 "1/2" 값을 도입하는 효과를 가지며, (예컨대, 알려져 있지 않은 값들을 "0" 또는 "1"로 설정하는 것과 비교하여) 더 정확한 복원을 제공하는 것으로 밝혀졌다.
전술된 예들은 대체적으로 손실 압축에 관한 것으로, 여기서, 고정된 비트 비율을 보장하기 위해, 원하는 고정된 크기에 도달할 때 인코딩이 중지되어, 원래의 정보의 일부가 손실되게 한다(그리고 원래의 데이터, 예컨대, 이미지는 완벽하게 (무손실) 복원될 수 없다). 손실 프레임 버퍼 압축은 고해상도 픽처(picture) 버퍼들에 대한 보장된 감소된 메모리 대역폭을 제공하기 위해 비디오 및 이미지 프로세싱에 매우 중요하다. 그러나, 손실이 있게 코딩된 이미지에 대한 무손실 확장이 요구될 수 있는 일부 상황들이 존재한다. 예를 들어, 도 12에 예시된 바와 같이, 비디오 디코더에서의 재구성된 비디오 프레임의 경우를 고려하는데, 여기서는, 이미지 신호 프로세서(image signal processor, ISP)(1200), 예컨대, 카메라로부터의 정보가 비디오 프로세서(video processor, VPU)(1202)에 그리고 궁극적으로는 디스플레이 프로세서(display processor, DPU)(1204)에 제공된다. VPU(1202) 및 DPU(1204)는 대체적으로, 이러한 프레임에 대한 손실이 있고 고정된 대역폭 포맷으로부터 이익을 얻을 수 있다. 그러나, 비디오 디코더는 향후 디코딩을 위해 기준 픽처로서 프레임을 사용할 필요가 있을 수 있다. 이러한 경우에, 프레임의 무손실 (그러나 압축된) 버전이 요구된다.
따라서, 본 명세서에 설명된 기술의 실시예들에 따르면, 손실 코딩이 무손실 코딩으로 해결(resolve)되도록 허용하는 추가적인 "무손실 보상" 계층이 사용될 수 있다. 예를 들어, 무손실 보상 계층은 고정된 크기의 손실 출력 패킷에 맞지 않았던 비트 평면 코딩된 값들을 제공하여, 엔트로피 코딩이 무손실임을 보장한다. 따라서, 무손실 보상 계층은 고정된 크기의 데이터 패킷과 함께 생성될 수 있고, 무손실 보상 계층 및 고정된 크기의 데이터 패킷은 손실 없이 원래의 입력 데이터를 복원하는 데 요구되는 모든 정보를 함께 포함한다. 따라서, 손실 코딩이 허용될 수 있는(그리고 그것이 요구되는) 경우에는, 고정된 크기의 데이터 패킷이 (단독으로) 제공될 수 있다. 그러나, 무손실 코딩이 요구되는 경우에는, 고정된 크기의 데이터 패킷이 무손실 보상 계층과 함께 제공될 수 있다.
그러나, 전체 코딩이 무손실이기 위해서는, 주파수 변환 오퍼레이션이 무손실인 것이 또한 요구된다. 무손실 변환은 삼각 2 × 2 행렬들을 대각선 상에 단위들과 곱하는 일련의 "리프팅(lifting)" 스테이지들로 구성될 수 있다. 그러나, 이러한 반복적 접근법은 비교적 높은 지연과 연관될 수 있고, 손실 코딩에 대해 사용될 때 다수의 라운딩 에러 스테이지들을 도입할 것이다. 손실 및 무손실 코딩에 대해 효율적으로 사용될 수 있는 변환을 갖는 것이 바람직하다.
손실 변환들은 전형적으로, 예컨대 도 13에 도시된 바와 같이, 라운딩된 우측 시프트(rounded right shift)가 뒤따르는 정수 행렬 곱셈으로 구현된다. 예를 들어, 4점 DCT가 하기의 행렬로서 근사화될 수 있고, 이어서 5의 라운딩된 우측 시프트가 뒤따른다:
행렬 C/32가 행렬식 1을 갖고, 따라서 영역들을 동일한 볼륨의 영역에 맵핑시키더라도, 그것은 라운딩 스테이지에 의해 도입되는 에러들로 인해 가역적이지 않다.
따라서, 실시예들에서, 바이어스된 라운딩 스킴은 변환이 무손실임을 보장하는 데 사용될 수 있다. 예를 들어, 가장 가까운 것으로 라운딩하기 보다는, 라운딩 오퍼레이션은, 항상 가장 가까울 수는 없지만 변환으로의 각각의 입력이 고유 출력으로 맵핑되도록 가역 맵을 생성하는 값으로 라운딩할 수 있다. 이러한 무손실 변환의 예가 도 14에 도시되어 있다.
라운딩은 시프트 오퍼레이션에 의해 폐기되는 비트들의 값들에 기초한다. 예를 들어, 정수 행렬 곱셈 후에, MSB 값들은 가장 가까운 값으로 라운딩될 수 있다. 그러나, LSB 값들의 경우, 바이어스된 라운딩 표가 1 대 1 대응이 있음을 보장하는 데 사용될 수 있다. LSB 비트들이 대체적으로 MSB 비트들보다 더 빨리 이용가능하기 때문에, 이러한 접근법은, 예컨대, 하드웨어 타이밍의 면에서 효율적으로 구현될 수 있다.
예를 들어, (변환이 볼륨을 보존하도록) 행렬식 ±1과 함께 변환 T(x)=(C.x)/n이 주어지면(여기서 C는 k × k 정수 행렬이고, x는 k개의 정수들의 벡터이고, n은 정수 약수(전형적으로, 2의 거듭제곱)임), 정수 값 출력들을 제공하도록(즉, 적합한 라운딩 오퍼레이션을 수행함으로써) 변환 T(x)를 근사화하고 또한 완전히 가역 함수 F(x)를 찾는 것이 요구된다.
이는 하기와 같이 행해질 수 있다:
1) C'= C mod n을 정의함. 따라서, C'는, 예컨대, R개의 요소들: C'(u1),..., C'(uR)를 포함하는 유한한 범위를 가짐;
2) D/m으로서 T의 역을 기록함. 여기서, D는 적분 행렬이고 m은 정수임;
3) 아래와 같도록 최소 라운딩 벡터들 r1,..., rR을 찾음:
a. C(ui) + ri는 i의 각각의 값에 대한 n의 배수임; 그리고
b. D(vi) mod m은 i의 각각의 값에 대해 상이하며, 여기서, vi = (Ci + ri)/n임.
4) 이어서, 순방향 함수 F(x)를 구현하기 위해, 입력 x가 주어지면 하기의 단계들이 수행될 수 있음:
a. 정수 행렬 배수 C.x를 연산함;
b. C.x mod n = C'(ui)이도록 i를 설정함; (n이 2의 거듭제곱인 경우, 이는 C.x의 하단(bottom) log2(n)개의 비트들을 구하는 것을 수반함); 그리고
c. 출력 F(x) = (C.x + ri)/n을 설정함.
5) 대응하는 역 함수 G(y)를 구현하기 위해, 입력 y가 주어지면 하기의 단계들이 수행될 수 있음:
a. 정수 행렬 곱셈 D.y를 연산함;
b. D.y mod m = D(vi) mod m이도록 i를 설정함; (m이 2의 거듭제곱인 경우, 이는 D.y의 하단 log2(m) 비트들을 탐색하는 것을 수반함); 그리고
c. 출력 G(y) = (D.y + si)/m을 설정함, 여기서, si = m.ui - D.vi이며, 이는 시간 전에 미리계산될 수 있음.
아래의 코드는 C에서의 예시적인 구현예를 제공한다:
전술한 상세한 설명은 예시 및 설명의 목적으로 제시되었다. 이는 본 명세서에 설명된 기술을 개시된 정확한 형태로 망라하거나 제한하고자 하는 것이 아니다. 상기 교시를 고려하여 많은 수정 및 변형이 가능하다. 기술된 실시예들은 본 명세서에 설명된 기술의 원리들 및 그의 실제 응용들을 가장 잘 설명하기 위해 선택되어, 이에 의해, 당업자들이 본 명세서에 설명된 기술을, 다양한 실시예들에서 그리고 고려되는 특정 용도에 적합한 바와 같은 다양한 수정들로 가장 잘 활용할 수 있게 했다. 범주는 본 명세서에 첨부된 청구범위에 의해 한정되는 것으로 의도된다.
Claims (20)
- 값들의 공간 분포를 표현하는 데이터 요소들의 어레이를 인코딩하는 방법으로서,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 상기 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하는 단계;
상기 주파수 도메인 계수들의 세트를 복수의 비트 평면 어레이들로서 표현하는 단계 - 각각의 비트 평면 어레이는 상기 주파수 도메인 계수 값들의 특정 비트 포지션(position)을 표현하고, 각각의 비트 평면 어레이는 상기 비트 평면 어레이가 표현하는 상기 비트 포지션에서의 상기 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -; 및
데이터 패킷이 가득 찰 때까지, 최상위 비트(most significant bit, MSB)를 표현하는 상기 비트 평면 어레이로부터 아래쪽으로 작업하면서 비트 평면 시퀀스 내의 상기 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 데이터 패킷으로서 상기 주파수 도메인 계수들의 세트를 인코딩하는 단계를 포함하고,
각각의 비트 평면 어레이는, 상기 비트 평면 어레이를 각자의 섹션들로 세분하고, 상기 데이터 패킷 내에 이용가능한 공간이 있다는 조건에 따라, 상기 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치들을 표시하는 데이터를 상기 데이터 패킷 내에 포함시킴으로써, 그리고 이어서, 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 상기 계수(들)의 위치(들)가 표시될 때까지, 재귀적으로 상기 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들뿐만 아니라 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들을 각자의 서브섹션들로 세분하고, 상기 비트 평면 시퀀스 내의 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 임의의 서브섹션들의 위치들을 표시하는 데이터를 상기 데이터 패킷 내에 포함시킴으로써, 인코딩되는, 방법. - 제1항에 있어서, 각각의 비트 평면 어레이에 대한 상기 인코딩은, 상기 데이터 패킷 내에 이용가능한 공간이 있는 한, 상기 데이터 패킷 내에서, 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 계수의 위치를 표시하는 데이터 뒤에 상기 계수의 부호를 표시하는 데이터를 포함시키는 것을 추가로 포함하는, 방법.
- 제1항 또는 제2항에 있어서, 각각의 비트 평면 어레이에 대한 상기 인코딩은, 상기 데이터 패킷 내에 이용가능한 공간이 있는 한, 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 계수(들)에 대한 원시 비트 값들을 표시하는 데이터를 상기 패킷 데이터 내에 포함시키는 것을 추가로 포함하는, 방법.
- 제3항에 있어서, 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 계수(들)에 대한 상기 비트 값들을 표시하는 상기 데이터는 상기 데이터 패킷 내에서, 그 비트 평면 내의 새롭게 활성인 계수(들) 모두의 포지션(들)이 표시된 뒤에 포함되는, 방법.
- 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 데이터 패킷이 가득 찰 때, 상기 고정된 크기의 데이터 패킷과 함께 무손실 보상 계층이 손실 없이 원래의 입력 데이터 어레이를 복원하기 위해 요구되는 정보 모두를 포함하도록, 데이터가 상기 고정된 크기의 데이터 패킷 내에 포함되지 않았던 임의의 비트들에 대한 상기 비트 값들 및 위치들을 표시하는 상기 정보를 포함하는 상기 무손실 보상 계층을 생성하는 단계를 포함하는, 방법.
- 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 주파수 변환 오퍼레이션은 각각의 데이터 요소를 고유 주파수 도메인 계수 출력으로 변환하여, 상기 주파수 변환 오퍼레이션이 가역이도록 구성되는, 방법.
- 데이터 요소들의 어레이를 인코딩하는 방법으로서,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 상기 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하는 단계 - 상기 주파수 변환 오퍼레이션은 라운딩(rounding) 오퍼레이션을 포함하고, 상기 라운딩 오퍼레이션은 변환되고 있는 각각의 데이터 요소가 고유 주파수 도메인 계수 출력에 맵핑되는 것을 보장하기 위해 라운딩되고 있는 값들에 대한 라운딩 값들을 선택하도록 구성됨 -; 및
상기 데이터 요소들의 어레이의 인코딩된 표현을 제공하기 위해 상기 주파수 도메인 계수들의 세트를 인코딩하는 단계를 포함하는, 방법. - 제7항에 있어서, 무손실 인코딩 스킴을 사용하여 상기 주파수 도메인의 세트를 인코딩하는 단계를 포함하는, 방법.
- 제7항 또는 제8항에 있어서,
데이터 패킷이 가득 찰 때까지, 최상위 비트를 표현하는 비트 평면 어레이로부터 아래쪽으로 작업하면서 비트 평면 시퀀스 내의 상기 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 데이터 패킷으로서 상기 주파수 도메인 계수들의 세트를 인코딩하는 단계 -
각각의 비트 평면 어레이는, 상기 비트 평면 어레이를 각자의 섹션들로 세분하고, 상기 데이터 패킷 내에 이용가능한 공간이 있다는 조건에 따라, 상기 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치들을 표시하는 데이터를 상기 데이터 패킷 내에 포함시킴으로써, 그리고 이어서, 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 상기 계수(들)의 위치(들)가 표시될 때까지, 재귀적으로 상기 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들뿐만 아니라 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들을 각자의 서브섹션들로 세분하고, 상기 비트 평면 시퀀스 내의 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 임의의 서브섹션들의 위치들을 표시하는 데이터를 상기 데이터 패킷 내에 포함시킴으로써, 인코딩됨 -; 및
상기 데이터 패킷이 가득 찰 때, 데이터가 상기 고정된 크기의 데이터 패킷 내에 포함되지 않았던 임의의 비트들에 대한 상기 비트 값들 및 위치들을 표시하는 정보를 포함하는 무손실 보상 계층을 생성하는 단계를 포함하는, 방법. - 데이터 스트림을 디코딩하기 위한 방법으로서, 상기 데이터 스트림은 비트 평면 어레이들의 시퀀스로서 주파수 도메인 계수들의 세트를 인코딩하는 고정된 크기의 데이터 패킷을 포함하고, 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 상기 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 상기 비트 평면 어레이가 표현하는 비트 포지션에서의 상기 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함하고, 상기 고정된 크기의 데이터 패킷은, 상기 고정된 크기의 데이터 패킷 내에 인코딩된 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대한, 상기 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치(들)를 표시하는 데이터뿐만 아니라, 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 상기 주파수 도메인 계수(들)의 위치(들)가 표시될 때까지, 임의의 재귀적으로 정의된, 상기 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들의 서브섹션들 및 또한 상기 비트 평면 시퀀스 내의 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 서브섹션들에 대한 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들의 임의의 서브섹션들의 위치(들)를 표시하는 데이터 등을 포함하고, 상기 방법은,
상기 고정된 크기의 데이터 패킷으로부터, 상기 고정된 크기의 데이터 패킷 내에 인코딩된 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대하여, 0이 아닌 비트 값이 그 비트 평면 어레이 내에 처음 나타난 상기 주파수 도메인 계수들의 위치(들)를 결정하는 단계;
각각의 비트 평면 어레이에 대한 상기 주파수 도메인 계수들의 식별된 위치(들)를 사용하여 복수의 비트 평면 어레이들을 생성하는 단계 - 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 상기 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 상기 비트 평면 어레이가 표현하는 비트 포지션에서의 상기 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -;
주파수 도메인 계수들의 세트를 생성하도록 상기 생성된 비트 평면 어레이들을 조합하는 단계; 및
디코딩된 출력을 획득하도록 상기 주파수 도메인 계수들의 세트를 사용하는 단계를 포함하는, 방법. - 제10항에 있어서, 상기 고정된 크기의 데이터 패킷 내에 포함되지 않지만 부호가 알려져 있는 주어진 비트 평면 어레이 내의 임의의 비트 값들에 대하여, 상기 비트 평면 어레이 내의 그 포지션에 0을 포함시키고 상기 비트 평면 시퀀스 내의 아래의 다음 비트 평면 내의 대응하는 포지션에 1을 포함시키는, 방법.
- 제10항 또는 제11항에 있어서, 상기 고정된 크기의 데이터 패킷 내에 포함되지 않고 상기 부호가 알려져 있지 않은 주어진 비트 평면 내의 임의의 비트 값들에 대하여, 그 비트 평면 내의 그 포지션에 0을 포함시키는, 방법.
- 값들의 공간 분포를 표현하는 데이터 요소들의 어레이를 인코딩하기 위한 장치로서, 상기 장치는 인코더를 포함하고, 상기 인코더는,
주파수 도메인 계수들의 대응하는 세트를 생성하기 위해 데이터 요소들의 어레이 상에서 주파수 변환 오퍼레이션을 수행하기 위한 변환 회로부;
상기 주파수 도메인 계수들의 세트를 복수의 비트 평면 어레이들로서 표현하기 위한 비트 평면 코딩 회로부 - 각각의 비트 평면 어레이는 상기 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 상기 비트 평면 어레이가 표현하는 비트 포지션에서의 상기 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -; 및
데이터 패킷이 가득 찰 때까지, 최상위 비트를 표현하는 비트 평면 어레이로부터 아래쪽으로 작업하면서 비트 평면 시퀀스 내의 상기 비트 평면 어레이들을 인코딩함으로써 고정된 크기를 갖는 상기 데이터 패킷으로서 비트 평면 어레이 표현된 주파수 도메인 계수들의 세트를 인코딩하도록 구성된 인코딩 회로부를 포함하고,
상기 인코딩 회로부는, 상기 비트 평면 어레이를 각자의 섹션들로 세분하고, 상기 데이터 패킷 내에 이용가능한 공간이 있다는 조건에 따라, 상기 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치들을 표시하는 데이터를 상기 데이터 패킷 내에 포함시킴으로써, 그리고 이어서, 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 상기 계수(들)의 위치(들)가 표시될 때까지, 재귀적으로 상기 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들뿐만 아니라 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들을 각자의 서브섹션들로 세분하고, 상기 비트 평면 시퀀스 내의 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 임의의 서브섹션들의 위치들을 표시하는 데이터를 상기 데이터 패킷 내에 포함시킴으로써, 각각의 비트 평면 어레이를 인코딩하도록 구성된, 장치. - 제13항에 있어서, 각각의 비트 평면 어레이에 대한 상기 인코딩은, 상기 데이터 패킷 내에 이용가능한 공간이 있는 한, 상기 데이터 패킷 내에서, 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 계수의 위치를 표시하는 데이터 뒤에 상기 계수의 부호를 표시하는 데이터를 포함시키는 것을 추가로 포함하는, 장치.
- 제13항 또는 제14항에 있어서, 각각의 비트 평면 어레이에 대한 상기 인코딩은, 상기 데이터 패킷 내에 이용가능한 공간이 있는 한, 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 계수(들)에 대한 원시 비트 값들을 표시하는 데이터를 상기 패킷 데이터 내에 포함시키는 것을 추가로 포함하는, 장치.
- 제15항에 있어서, 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 계수(들)에 대한 상기 비트 값들을 표시하는 상기 데이터는 상기 데이터 패킷 내에서, 그 비트 평면 내의 새롭게 활성인 계수(들) 모두의 포지션(들)이 표시된 뒤에 포함되는, 장치.
- 제13항 내지 제16항 중 어느 한 항에 있어서, 상기 인코딩 회로부는, 상기 데이터 패킷이 가득 찰 때, 상기 고정된 크기의 데이터 패킷과 함께 무손실 보상 계층이 손실 없이 원래의 입력 데이터 어레이를 복원하기 위해 요구되는 정보 모두를 포함하도록, 데이터가 상기 고정된 크기의 데이터 패킷 내에 포함되지 않았던 임의의 비트들에 대한 상기 비트 값들 및 위치들을 표시하는 상기 정보를 포함하는 상기 무손실 보상 계층을 생성하도록 구성되는, 장치.
- 제13항 내지 제17항 중 어느 한 항에 있어서, 상기 주파수 변환 오퍼레이션은 각각의 데이터 요소를 고유 주파수 도메인 계수 출력으로 변환하여, 상기 주파수 변환 오퍼레이션이 가역이도록 구성되는, 장치.
- 비트 평면 어레이들의 시퀀스로서 주파수 도메인 계수들의 세트를 인코딩하는 고정된 크기의 데이터 패킷을 포함하는 데이터 스트림을 디코딩하기 위한 장치로서, 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 상기 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 상기 비트 평면 어레이가 표현하는 비트 포지션에서의 상기 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함하고, 상기 고정된 크기의 데이터 패킷은, 상기 고정된 크기의 데이터 패킷 내에 인코딩된 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대한, 상기 비트 평면 시퀀스 내에서 처음으로 0이 아닌 비트 값을 갖는 하나 이상의 계수(들)를 포함하는 그 비트 평면 어레이 내의 임의의 섹션들의 위치(들)를 표시하는 데이터뿐만 아니라, 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 상기 주파수 도메인 계수(들)의 위치(들)가 표시될 때까지, 임의의 재귀적으로 정의된, 상기 비트 평면 어레이 내의 임의의 그러한 새롭게 활성인 섹션들의 서브섹션들 및 또한 상기 비트 평면 시퀀스 내의 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 어레이 내에 나타난 서브섹션들에 대한 상기 제1의 0이 아닌 비트 값이 상기 비트 평면 시퀀스 내의 이전 비트 평면 어레이 내에 나타났던 임의의 섹션들의 임의의 서브섹션들의 위치(들)를 표시하는 데이터 등을 포함하고, 상기 장치는 디코더를 포함하고, 상기 디코더는,
고정된 크기의 데이터 패킷으로부터, 상기 고정된 크기의 데이터 패킷 내에 인코딩된 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이에 대하여, 0이 아닌 비트 값이 그 비트 평면 어레이 내에 처음 나타난 상기 주파수 도메인 계수들의 위치(들)를 결정하도록 구성된 입력 회로부;
각각의 비트 평면 어레이에 대한 상기 주파수 도메인 계수들의 식별된 위치(들)를 사용하여 복수의 비트 평면 어레이들을 생성하도록 - 상기 비트 평면 시퀀스 내의 각각의 비트 평면 어레이는 상기 주파수 도메인 계수 값들의 특정 비트 포지션을 표현하고, 각각의 비트 평면 어레이는 상기 비트 평면 어레이가 표현하는 비트 포지션에서의 상기 주파수 도메인 계수들 각각의 비트 값들에 대응하는 비트들의 어레이를 포함함 -, 그리고 주파수 도메인 계수들의 세트를 생성하도록 상기 생성된 비트 평면 어레이들을 조합하도록 구성된 비트 평면 디코딩 회로부; 및
디코딩된 출력을 획득하기 위해 상기 주파수 도메인 계수들의 세트를 사용하도록 구성된 출력 회로부를 포함하는, 장치. - 데이터 프로세서 상에서 실행될 때 제1항 내지 제12항 중 어느 한 항의 방법을 수행하는 소프트웨어 코드를 포함하는 컴퓨터 프로그램.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1819715.2A GB2579568B (en) | 2018-12-03 | 2018-12-03 | Encoding data arrays |
GB1819715.2 | 2018-12-03 | ||
PCT/GB2019/053416 WO2020115471A1 (en) | 2018-12-03 | 2019-12-03 | Bit plane encoding of data arrays |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210094054A true KR20210094054A (ko) | 2021-07-28 |
Family
ID=65024875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217020020A KR20210094054A (ko) | 2018-12-03 | 2019-12-03 | 데이터 어레이들의 비트 평면 인코딩 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20220014767A1 (ko) |
KR (1) | KR20210094054A (ko) |
CN (1) | CN113170140A (ko) |
GB (1) | GB2579568B (ko) |
WO (1) | WO2020115471A1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2589066B (en) | 2019-10-24 | 2023-06-28 | Advanced Risc Mach Ltd | Encoding data arrays |
US11423580B2 (en) | 2020-10-12 | 2022-08-23 | Arm Limited | Decoding data arrays |
GB2614073B (en) | 2021-12-21 | 2024-06-05 | Advanced Risc Mach Ltd | Cache systems |
GB2614071B (en) | 2021-12-21 | 2024-07-17 | Advanced Risc Mach Ltd | Cache systems |
GB2614069B (en) | 2021-12-21 | 2024-10-09 | Arm Ltd | Cache systems |
GB2622074A (en) | 2022-09-01 | 2024-03-06 | Advanced Risc Mach Ltd | Cache systems |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3284932B2 (ja) * | 1997-08-05 | 2002-05-27 | 松下電器産業株式会社 | 画像処理装置 |
US7020342B1 (en) * | 1999-08-27 | 2006-03-28 | Koninklijke Philips Electronics N.V. | Scalable coding |
GB2388502A (en) * | 2002-05-10 | 2003-11-12 | Chris Dunn | Compression of frequency domain audio signals |
KR20050087956A (ko) * | 2004-02-27 | 2005-09-01 | 삼성전자주식회사 | 무손실 오디오 부호화/복호화 방법 및 장치 |
US20070071331A1 (en) * | 2005-09-24 | 2007-03-29 | Xiteng Liu | Image compression by economical quaternary reaching method |
EP4131258A1 (en) * | 2010-07-20 | 2023-02-08 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Audio decoder, audio decoding method, audio encoder, audio encoding method and computer program |
CN101975558B (zh) * | 2010-09-03 | 2012-04-11 | 东南大学 | 基于彩色光栅投影的快速三维测量方法 |
US8824812B2 (en) * | 2012-10-02 | 2014-09-02 | Mediatek Inc | Method and apparatus for data compression using error plane coding |
-
2018
- 2018-12-03 GB GB1819715.2A patent/GB2579568B/en active Active
-
2019
- 2019-12-03 KR KR1020217020020A patent/KR20210094054A/ko not_active Application Discontinuation
- 2019-12-03 CN CN201980078113.4A patent/CN113170140A/zh active Pending
- 2019-12-03 US US17/296,432 patent/US20220014767A1/en active Pending
- 2019-12-03 WO PCT/GB2019/053416 patent/WO2020115471A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
GB2579568A (en) | 2020-07-01 |
WO2020115471A1 (en) | 2020-06-11 |
CN113170140A (zh) | 2021-07-23 |
GB201819715D0 (en) | 2019-01-16 |
US20220014767A1 (en) | 2022-01-13 |
GB2579568B (en) | 2022-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20210094054A (ko) | 데이터 어레이들의 비트 평면 인코딩 | |
CN106254877B (zh) | 视频处理系统、处理视频数据帧的方法、装置与存储介质 | |
US10225569B2 (en) | Data storage control apparatus and data storage control method | |
US8254700B1 (en) | Optimized method and system for entropy coding | |
US20170352165A1 (en) | Encoding and decoding arrays of data elements | |
CN111402380B (zh) | 一种gpu压缩纹理处理方法 | |
US11153578B2 (en) | Gradient texturing compression codec | |
CN110896483B (zh) | 压缩和解压缩图像数据的方法 | |
GB2561152A (en) | Data processing systems | |
US11263786B2 (en) | Decoding data arrays | |
KR20220048459A (ko) | 데이터 어레이들의 디코딩 | |
US20050219252A1 (en) | Two-dimensional buffer, texture and frame buffer decompression | |
US20190238832A1 (en) | Image processing device | |
US10970880B2 (en) | Texture compression | |
US9819969B2 (en) | Generalization of methods and systems for image compression while encoding at least one extra bit | |
US8238676B2 (en) | Image data compressor and image data decompressor | |
GB2607614A (en) | Methods of and apparatus for storing data in memory in graphics processing systems | |
US20190124331A1 (en) | Selecting encoding options | |
US20240073421A1 (en) | Image processing device and operating method of the image processing device | |
US20240323407A1 (en) | Image processing device and operating method thereof | |
KR20240143634A (ko) | 이미지 처리 장치 및 이미지 처리 장치의 동작 방법 | |
TW202240398A (zh) | 存取經編碼資料區塊 | |
KR20210049002A (ko) | 데이터 어레이 인코딩 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal |