KR20210049002A - 데이터 어레이 인코딩 - Google Patents

데이터 어레이 인코딩 Download PDF

Info

Publication number
KR20210049002A
KR20210049002A KR1020200137205A KR20200137205A KR20210049002A KR 20210049002 A KR20210049002 A KR 20210049002A KR 1020200137205 A KR1020200137205 A KR 1020200137205A KR 20200137205 A KR20200137205 A KR 20200137205A KR 20210049002 A KR20210049002 A KR 20210049002A
Authority
KR
South Korea
Prior art keywords
data
block
data elements
rounding
elements
Prior art date
Application number
KR1020200137205A
Other languages
English (en)
Inventor
스벤 올라 요하네스 휴고슨
제이콥 악셀 프라이스
하칸 라스-고란 페르손
무함마드 알리 샤미
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20210049002A publication Critical patent/KR20210049002A/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/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0001Systems modifying transmission characteristics according to link quality, e.g. power backoff
    • H04L1/0009Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the channel coding
    • 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/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/008Vector quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods 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 pixel
    • 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/184Methods 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 bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • H04N19/426Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements using memory downsizing methods
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods 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

Abstract

데이터 요소들의 어레이에서의 데이터 요소들의 블록을 인코딩할 때, 블록 내의 데이터 요소들에 대한 데이터 값들은 데이터 요소들의 데이터 값들에 대한 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 절단된 데이터 값들로서 표시되고 데이터 패킷으로 저장된다. 라운딩 모드는 데이터 요소들의 블록을 디코딩할 때 적용될 수 있는 복수의 이용가능한 라운딩 모드로부터 선택되고 선택된 라운딩 모드의 표시는 인코딩된 데이터 패킷과 함께 제공된다. 라운딩 모드는 블록 내의 데이터 요소들에 대한 디코딩된 데이터 값들을 얻기 위해 데이터 패킷을 디코딩할 때 절단된 데이터 값들에 적용될 수 있는 하나 이상의 라운딩 비트 시퀀스(들)와 관련된다.

Description

데이터 어레이 인코딩{Encoding Data Arrays}
본 발명은 데이터 처리 시스템에서 데이터를 인코딩하는 방법 및 장치에 관한 것으로, 특히 그래픽 처리 시스템에서 텍스처 또는 프레임 버퍼 데이터와 같은 이미지 데이터를 압축하고 저장하는 방법에 관한 것이다. 또한 대응하는 디코딩 방법 및 장치가 기술된다.
그래픽 처리 시스템은 종종 생성된 이미지 데이터를 프레임 버퍼에 저장한다. 프레임 버퍼는 일반적으로 예를 들어, 해당 프레임 내의 (예를 들어) 픽셀 각각에 대한 밝기(루마(luma)) 값을 포함하여, 표시되는, 프레임(이미지)에 대한 완전한 데이터 세트를 포함한다(예를 들어, 이미지 데이터가 그레이스케일 이미지(grayscale image)를 나타내는 경우). 적절한 디스플레이 드라이버는 프레임 버퍼의 내용을 판독하고 거기에 저장된 이미지 데이터를 사용하여 원하는 프레임(이미지)을 표시하는 디스플레이를 구동할 수 있다.
그러나, 프레임 버퍼 내의 이미지 데이터('프레임 버퍼 데이터')의 저장 및 액세스는 데이터 처리 시스템의 저장 및/또는 대역폭 자원에 상대적으로 높은 요구를 부과할 수 있다(또는 반대로 이러한 요구가 충족되지 않을 때 성능이 저하된다).
따라서, 그래픽 처리 시스템에 부과되는 부담을 줄이려면, 이러한 프레임 버퍼 데이터를 "압축된" 형식으로 저장할 수 있는 것이 바람직하다. 이것은 예를 들어 처리 자원과 전력이 상대적으로 제한될 수 있는, 디지털 카메라와 같은 휴대용 장치, 또는 그러한 카메라를 포함하는 모바일 장치의, 데이터 처리 장치에서 특히 바람직하다.
또한, 그래픽 처리와 관련된 또 다른 예는, 예를 들어, 생성되는 렌더 출력의 각 샘플링 위치(예를 들어, 픽셀)에 매핑(mapped)될 수 있는 주어진 텍스처 데이터(예를 들어, 색상, 휘도 등)를 각각 나타내는 텍스처 요소들(또는 '텍셀(texels')의 배열 형태로, 텍스처 데이터를 저장할 때일 것이다. 다시 말하지만, 이 텍스처 데이터의 저장 및 액세스는 데이터 처리 시스템에 상대적으로 높은 저장 및/또는 대역폭 요구사항을 부과할 수 있다.
물론 특정 정보의 저장 및/또는 전송에 필요한 데이터의 양을 줄이는 것이 바람직한 데이터 처리의 다양한 다른 경우에도 유사한 고려사항이 적용된다.
따라서, 대역폭과 메모리 소비를 줄이기 위해 데이터를 압축하도록 데이터 요소들의 어레이를 인코딩하기 위한 데이터를 처리할 때 일반적이다. 이를 위해, 다양한 데이터 압축 방식이 개발되었다.
일부 데이터 압축 방식은 데이터 요소들의 원래 어레이가 인코딩된 데이터로부터 완벽하게 재구성될 수 있도록 데이터를 무손실 방식으로 인코딩한다. 그러나, 일부 애플리케이션의 경우, 일부 출력 충실도(output fidelity)를 잃는 것이 허용될 수 있으며 주어진 대역폭(비트 전송률)을 보장할 수 있는 것이 더 바람직할 수 있다.
따라서, 다른 데이터 압축 방식은 고정된 크기의 데이터 패킷으로 인코딩할 수 있다. 이 경우, 고정 크기 데이터 패킷으로의 압축은 본질적으로 '손실(lossy)'이다(고정된 크기 데이터 패킷이 가득 차면 나머지 비트가 데이터 패킷에 포함되지 않으므로 이 시점에서 해당 비트들이 효과적으로 폐기되고, 따라서 폐기된 비트들과 관련된 정보가 손실된다).
출원인은 특히 이러한 손실 압축 방식을 사용할 때, 데이터 인코딩을 위한 배열의 개선의 여지가 남아 있다고 믿는다.
본 발명의 제1 측면에 따르면, 데이터 요소들의 어레이를 처리하는 방법이 제공되며, 각 데이터 요소는 각각의 비트 시퀀스로 표현되는 관련된 데이터 값을 가지며, 상기 방법은,
데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해,
데이터 요소들의 데이터 값들에 대한 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 절단된 데이터 값들로서 나타내는 단계와;
복수의 이용 가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 단계를 포함하며, 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되고, 데이터 요소들의 블록을 디코딩할 때 적용되는 라운딩 모드는,
데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 근거하여 데이터 요소들의 블록에 대한 제1 대표 값을 결정하는 것과;
복수의 이용 가능한 라운딩 모드 중 적어도 하나에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하며, 여기서 라운딩 모드에 대한 대표 값은 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 근거하여 결정되는 것과;
데이터 값들에 근거하여 결정된 데이터 요소들의 블록에 대한 제1 대표 값을 복수의 이용 가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값과 비교하여 복수의 이용 가능한 라운딩 모드 중 어느 것이 제1 대표 값에 가장 가까운 대표 값을 제공하는지 결정하는 것과;
복수의 이용 가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 근거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 것에 의해 선택되며,
상기 방법은,
데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값들을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 데이터 패킷에 대해 제공함으로써 데이터 요소들의 블록을 인코딩하는 단계를 더 포함하고,
데이터 패킷으로 인코딩된 데이터 요소들의 블록에서 데이터 요소(들) 중 하나 이상에 대한 데이터 값(들)을 사용하고자 하는 경우, 상기 방법은 후속으로
데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터와 함께 디코딩을 위한 데이터 패킷을 디코더 회로에 전달하는 단계와;
하나 이상의 데이터 요소(들)에 대해 절단된 데이터 값(들)을 추출하는 단계와;
표시된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 절단된 데이터 값(들)에 추가하여 데이터 요소들 블록 내의 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 획득하는 단계를 포함한다.
본 발명의 제2 측면에 따르면, 데이터 요소들의 어레이를 처리하기 위한 데이터 처리 시스템이 제공되며, 각각의 데이터 요소는 각각의 비트 시퀀스로 표현되는 관련 데이터 값을 가지며, 상기 데이터 처리 시스템은,
데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해,
데이터 요소들의 데이터 값들에 대해 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 절단된 데이터 값들로서 나타내고,
복수의 이용 가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록 구성된 인코더 회로를 구비하고, 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 라운딩 모드의 선택은,
데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 근거하여 데이터 요소들의 블록에 대한 제1 대표 값을 결정하고,
복수의 이용 가능한 라운딩 모드 중 적어도 하나에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하고, 여기서 라운딩 모드에 대한 대표 값은 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소에 대한 절단된 데이터 값들에 근거하여 결정되며,
데이터 값들에 근거하여 결정된 데이터 요소들의 블록에 대한 제1 대표 값을 복수의 이용 가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값들과 비교하여 복수의 이용 가능한 라운딩 모드 중 어느 것이 제1 대표 값에 가장 가까운 대표 값을 제공하는지를 결정하며,
복수의 이용 가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 근거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록
구성되는 라운딩 모드 선택 회로에 의해 수행되며,
성가 인코더 회로는,
데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값을 저장하고 데이터 패킷을 디코딩할 때 사용되는 라운딩 모드를 나타내는 데이터를 패킷 데이터에 대해 제공함으로써 데이터 요소들의 블록을 인코딩하도록 더 구성되며,
상기 데이터 처리 시스템은,
데이터 패킷으로 인코딩된 데이터 요소들의 블록에서 하나 이상의 데이터 요소들에 대한 데이터 값(들)을 사용하고자 하는 경우,
데이터 요소들의 블록에서 하나 이상의 데이터 요소(들)에 대한 절단된 데이터 값(들)을 추출하고,
표시된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 절단된 데이터 값(들)에 추가하여 데이터 요소들의 블록에서 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하도록 구성되는 디코더 회로를 더 구비한다.
본 발명은 일반적으로 예를 들어, 데이터를 압축하기 위해, 데이터 요소들의 블록을 데이터 패킷으로 인코딩하는 것에 관한 것이다. 본 발명에 있어서, 인코딩되는 데이터 요소들의 블록에 대해 라운딩 "모드"가 (복수의 이용 가능한 라운딩 모드로부터) 선택되고, 선택된 라운딩 모드(즉, 또는 적어도 이를 나타내는 데이터)가 블록에 대한 데이터 패킷과 함께 또는 바람직하게는 일부로서 예를 들어, 적합한 디코더(회로)에 제공된다. 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 연관된다. 선택된 라운딩 모드에 대한 라운딩 비트 시퀀스(들)는, 예를 들어 디코딩된 출력을 얻기 위해서, 데이터 패킷이 후속적으로 디코딩될 때 데이터 요소들의 블록 내의 데이터 요소들에 적용될 수 있다(적용된다).
이러한 방식으로 인코딩된 데이터 패킷, 즉 선택된 라운딩 모드를 나타내는 데이터가 제공된 데이터 패킷이 후속적으로 디코딩될 때, 디코더(회로)는 따라서 데이터 패킷에 대해 제공된 라운딩 모드를 결정할 수 있고, 그런 다음 표시된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 (인코딩된) 데이터 값들에 추가할 수 있다.
따라서 서로 다른 라운딩 모드와 관련된 라운딩 비트 시퀀스는 디코더(회로)에서 절단된 데이터 값들에 추가될 수 있는 (추가되는) 각각의 라운딩 '변경자(modifiers)'로서의 역할을 한다.
따라서 데이터 요소들의 블록에 대해 선택된 라운딩 모드는 디코딩된 출력을 얻기 위해 데이터 패킷으로 인코딩된 데이터 요소들의 블록 내의 모든 데이터 요소에 대한 데이터 값들을 수정하기 위해 블록 단위로 디코더(회로)에 의해 적용될 수 있다(적용된다).
이러한 방식으로, 데이터 요소들의 블록에 대해 적용될 이용 가능한 라운딩 모드의 세트로부터 (가장) 적절한 라운딩 모드를 결정하고 선택함으로써, 원래 데이터의 재생 개선을 용이하게 하고, 특히 아래에서 추가로 설명되는 바와 같이, 적어도 일부 인코딩 방식에 대해 발생할 수 있는 데이터 값들에서 원치 않는 조잡한 단계(coarse steps)(또는 점프)의 출현을 감소시키는 것이 가능하다는 것을 발견했다.
특히, 본 발명에 따른 데이터 요소들의 블록에 적용될 라운딩 모드의 선택은, 데이터 요소들의 블록의 인코딩이 데이터 요소들의 블록 내의 데이터 요소에 대한 데이터 값이 원래 데이터 값의 각 비트 시퀀스 표시의 하나 이상의 최상위 비트의 서브세트('절단된' 데이터 값)만을 사용하여 표시되고, 각 데이터 요소들에 대한 최상위 비트의 이러한 서브세트(절단된 데이터 값)만 인코딩된 데이터 패킷에 포함되도록, 블록 내의 데이터 요소들에 대한 데이터 값들의 비트 시퀀스 표시를 절단하는 것을 포함하는 (손실) 인코딩 방식과 함께 수행되는 것이 유리하다.
(의심을 피하기 위해 비트 시퀀스에 대한 최상위 비트(단수)가 가장 높은 비트 위치라는 것을 이해할 수 있을 것이다. 최상위 비트(복수)는 최상위 비트를 포함하고 그것에 가장 가까운 비트이다. 예를 들어, N 비트를 포함하는 비트 시퀀스의 경우, N번째 비트가 최고 값(최상위 비트)을 나타내고, 최상위 비트에는 N번째 비트, N-1번째 비트 등이 포함될 수 있다.)
따라서, 본 발명은 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 나타내는 비트 시퀀스를 절단해서 데이터 요소들의 블록을 인코딩하여 데이터 요소들에 대한 해당 '절단된 데이터 값들'을 제공하고, 절단된 데이터 값들은 원래 데이터 값들의 비트 시퀀스 표시로부터 한 개 이상의 최상위 비트의 서브세트만 포함한다.
따라서 이러한 방식으로 비트 시퀀스(즉, 데이터 값들)를 절단하면 원하는 데이터 압축을 제공할 수 있다. 그러나, 자연스럽게 데이터 패킷에 포함되지 않았던 최하위 비트로 표현되었던 모든 정보는 이러한 절단으로 인해 손실된다. 이것의 효과는 디코딩된 출력으로 나타낼 수 있는 정보가 더 적다는 것이다.
예를 들어, 데이터 요소들의 블록이 고정 크기 데이터 패킷으로 '원시(raw)' 형태로 인코딩되고 있는 경우가 이에 해당할 수 있다. 그 경우, 일단 데이터 패킷이 가득 차면, 나머지 모든 비트는 효과적으로 폐기된다. 따라서 고정 크기 데이터 패킷으로의 인코딩은 본질적으로 손실된다.
따라서, 바람직한 실시예에서는, 데이터 요소들의 어레이를 (적어도 인코딩 목적을 위해) 독립적으로 인코딩/디코딩될 수 있는 다수의 데이터 요소들의 블록으로 나누고 각 블록에 일정한 비트 버짓(budget)(크기)을 할당하여 각 블록이 고정 크기 데이터 패킷으로 인코딩되도록 보장한다. 각 블록에 대한 데이터 요소들에 대한 최상위 비트는 데이터 요소들의 각각에 대한 가장 높은 비트 값들(즉, 최상위 비트)로부터 시작하여 (데이터 패킷 '있는 그대로'에 비트 값을 포함시킴으로써) '원시' 형태로 인코딩되는 것이 바람직하며, 데이터 패킷에 여전히 이용가능한 공간이 있는 한, 데이터 요소들의 각각에 대해 가장 높은 비트 값을 추가한 후, 데이터 패킷이 가득 찰 때까지(할당된 비트 버짓이 사용됨), 데이터 요소들에 대한 다음으로 가장 높은 비트 값들로 이동한다.
이 인코딩 방식의 일부로서, 데이터 패킷에 데이터 요소들의 비트 값들이 추가되는 순서는, 예를 들어, 데이터 패킷에 가장 높은 비트 값들을 추가할 때 데이터 요소들이 처리되는 순서가 다음으로 가장 높은 비트 값들을 데이터 패킷 등에 추가할 때 데이터 요소들이 처리되는 순서와 다를 수 있도록, 바람직하게는 임의의 방식으로 변경되는 것이 바람직하다. 바람직하게는 데이터 패킷에 비트들이 추가되는 순서는, 데이터 요소들의 전체 어레이 및/또는 그러한 어레이의 시퀀스와 같이, 서로 다른 데이터 요소 블록들 사이에서 변경된다. 이것은 디코딩된 출력에 반복적인 아티팩트(repeating artefacts)를 도입하는 것을 피하는데 도움이 될 수 있다. 예를 들어, 전체 데이터 요소 어레이 내의 모든 블록에 대한 데이터 요소들이 항상 동일한 순서로 처리되었다면, 먼저 처리되는 데이터 요소들에 대한 데이터 패킷에 더 많은 수의 비트가 포함될 수 있으며, 이것은 예를 들어 어레이를 블록으로 분할하는 것에 근거해서, 디코딩된 출력에 반복 패턴을 도입할 수 있다.
따라서, 본 발명에 따른 인코딩 방식은 바람직하게는 블록에 대한 고정 크기 데이터 패킷을 여전히 보장하면서 할당된 비트 버짓 내에서 데이터 요소들의 블록 내의 데이터 요소들에 대한 최상위 비트를 가능한 한 많이 저장한다. 그러나, 데이터 패킷에 대한 원하는(고정된) 크기, 즉 데이터 패킷에 할당된 비트의 수에 따라, 이것은 최상위 비트 값의 서브세트만, 예를 들어 하나 또는 두 개의 최상위 비트 값만 블록 내의 각 데이터 요소에 대한 데이터 패킷에 포함된다(최하위 비트(또는 덜 중요한 비트(less significant bits))는 데이터 패킷에 포함되지 않는다)는 것을 의미할 수 있다.
본 출원인은 이 경우에, 그러한 데이터 패킷이 후속적으로 디코딩될 때, 절단된 데이터 값들에 근거하여 (단독으로) 취득된 디코딩된 출력이 특히 데이터 값들에서 비교적 조잡한 단계의 형태로 아티팩트(artefacts)를 포함할 수 있다는 것을 인식했다.
예를 들어, 일부 바람직한 실시 예에서, 데이터 요소들의 어레이는 그레이스케일 이미지 데이터의 어레이를 나타낼 수 있으며, 여기서 데이터 요소들의 각각은 (데이터 요소와 관련된 공간 위치(샘플)에서 각각의 루마(luma) 값을 나타내는) 루마 값과 관련이 있다.
실례로서, 8비트 루마 샘플의 8 x 8 블록을 128비트 고정 크기 데이터 패킷으로 인코딩하는 것이 바람직한 일반적인 경우를 고려한다. 데이터 패킷에 대한 전체 128비트 비트 버짓이 루마 샘플에 대해 이용 가능하다면(이것은 일반적으로 그렇지 않을 수 있으며 실시 예에서는 그렇지 않다는 것을 이해할 수 있지만, 예를 들어 할당된 비트 중 일부가, 예를 들어 데이터 패킷에 대한 적절한 헤더에서, 인코딩 방식 및/또는 라운딩 모드 등을 시그널링하는 데 사용되는 것이 바람직하기 때문에, 아래에서 자세히 설명하겠지만, 일반적으로 128비트 중 일부(less than all)만 루마 값들을 인코딩하는 데 이용할 수 있다), 이것은 각 루마 샘플에 대해 2비트만 이용할 수 있음을 의미한다.
따라서, 위에서 설명한 바람직한 인코딩 방식을 적용할 때, 각 루마 샘플에 대한 두 개의 최상위 비트(만)에 대한 비트 값(즉, 가장 높은 비트 위치(최상위 비트)에 대한 값 및 다음으로 가장 높은 비트 위치에 대한 값)은 '있는 그대로'('원시' 형태로) 데이터 패킷에 추가된다.
그러나, 전체 비트 버짓이 사용되었기 때문에 데이터 패킷은 '가득 차(full)' 있고, 루마 샘플에 대한 나머지 (덜 중요) 비트는 데이터 패킷에 추가되지 않는다(따라서 덜 중요한 비트와 관련된 정보는 손실된다).
따라서 원하는 압축 레벨에 따라 데이터 값들이 공격적으로 절단될 수 있으며, 상당한 양의 정보가 손실될 수 있음을 알 수 있을 것이다. 예를 들어, 이 예시에서 8비트 샘플의 경우, 이것은 절단된 데이터 값들이 '0'(00000000), '64'(01000000), '128'(10000000) 또는 '192'(11000000)(0에서 255까지의 원래 256 값과 비교)의 값을 갖도록 제한됨을 의미한다.
따라서 이것의 효과는, 최하위 비트를 사용하지 않으면 밝기의 더 부드러운 변화를 나타낼 수 없기 때문에 디코딩된 이미지(또는 이미지의 시퀀스)에서 상대적으로 조잡한 밝기 단계가 있을 수 있다는 것이다. 예를 들어, 이러한 밝기 단계는 특히 밝기 페이딩(brightness fadings) 중에, 예를 들어 이미지의 시퀀스에서 특정 블록이 시간이 지남에 따라 검은색(Y = 0) 흰색(Y = 256)에서 페이딩되는 경우에 볼 수 있다.
이러한 밝기 페이딩 중에, 일반적으로 전체 이미지의 일부만을 나타내는 단일 블록 내의 모든 루마 샘플은, 유사한(또는 동일한) 밝기 값을 가질 것으로 예상될 수 있다(그럴 필요는 없지만). 밝기를 페이딩할 때, 일반적으로 이미지의 시퀀스 전체에 걸쳐 부드러운 변화가 있도록 블록의 밝기가 점차적으로 페이딩되는 것이 바람직하다. 그러나, 위의 예에서, 원하는 부드러운 페이딩 효과를 제공하는 대신, 블록의 밝기는 예를 들어 0에서 64, 128, 192로 점프하는 등 비교적 조잡한 단계로 변경된다.
루마 샘플의 블록의 맥락에서 예가 제시되었지만, 위에 예시된 문제는 일반적으로 이러한 방식으로 적절하고 바람직하게 인코딩될 수 있는 임의의 다른 유형의 데이터(어레이)에 적용될 수 있음을 인식할 것이다.
이러한 문제는 본 발명을 사용하여 완화될 수 있다. 특히, 위에서 설명한 바와 같이, 본 발명은 디코더(회로)에 의해 블록 단위로 적용될 수 있는 라운딩 '변경자(modifier)'를 사용하여 디코더가 바람직하게는 특정 값(즉, 지정된 라운딩 비트 시퀀스의 형태로)을 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값(비트 시퀀스)의 각각에 추가하도록 제안한다. 블록에 사용되는 라운딩 모드는 이용가능한 여러 라운딩 모드의 세트로부터 선택되고 이를 통해서 디코딩된 블록에 대한 데이터 값들을 더 세밀하게 제어할 수 있어(절단된 데이터 값만 사용하는 것과 비교), 예를 들어 블록 간 데이터 값의 더 부드러운 변화가 디코딩된 출력에서 재현될 수 있다.
따라서, 데이터를 인코딩할 때, 인코더(회로)는 데이터 요소들의 원래 블록을 분석하고 블록에 대한 절단된 데이터 값에 추가될 때 원래 데이터의 최상의 재구성을 제공하는 라운딩 모드를 결정한다. 그러면 원래 데이터의 최상의 재구성을 제공하기 위해 결정된 라운딩 모드가 데이터 요소들의 블록에 대한 라운딩 모드로서 선택된다. 예를 들어, 루마 샘플의 블록의 경우, 데이터 요소들의 특정 블록에 대한 라운딩 모드는 재구성된 블록의 겉보기(예를 들어) 밝기(apparent brightness)가 인코더에 전송된 원래 블록의 밝기를 가장 근접하게 나타내도록 선택될 수 있다.
데이터 요소들의 블록에 대한 라운딩 모드를 선택하기 위해, 분석을 수행해서 상이한 라운딩 모드가 적용된 절단된 데이터 값들에 근거해서 디코딩된 출력에서 취득될 수 있는 값들과 원래 데이터 값들을 비교한다.
이 비교를 용이하게 하기 위해, 데이터 요소들의 블록에 대한 제1 대표 값이 원래 데이터 값들을 사용하여 결정된다. 제1 대표 값은 직접 또는 간접적으로 그리고 임의의 적절한 방식으로 데이터 값들에 근거해서 결정될 수 있다. 예를 들어, 일부 실시 예에서는, 원래 데이터 값들은 예를 들어, 제1 대표 값의 결정을 용이하게 하기 위해 상이한 형태로 처리되거나 변환될 수 있다. 예를 들어, 이것은 원래 데이터 값들을 절단하는 것을 포함할 수 있다(그러나 데이터 값들을 인코딩하는 데 사용되는 절단(truncation)보다 더 적은 정도). 이와 관련하여 다양한 다른 구성(arrangements)이 가능할 것이다.
대표 값은 블록 내의 데이터 값들의 '평균(average)'을 효과적으로 나타낼 수 있다. 대표 값은 블록 내의 데이터 요소들에 대한 '진정한(true)' 평균(예를 들면, 평균(mean)) 데이터 값을 나타내거나, 단순히 블록에 대한 '평균' 데이터 값의 추정치 또는 근사치를 나타낼 수 있다. 실제로, 일반적으로, 제1 대표 값은 여기에 설명된 방식으로 사용될 수 있는 적절한 대표 값을 제공하기 위해, 원하는 대로 임의의 적절한 방식으로 결정될 수 있다.
따라서, 실시 예들에서는, 대표 값은 블록 내의 데이터 요소들에 대한 데이터 값들 중 적어도 일부의 함수(function)로서 데이터 값들의 블록에 대해 계산된다. 대표 값의 계산은, 예를 들어 데이터 값들의 블록이 무엇을 나타내는지에 따라 임의의 적절하고 원하는 방식으로 수행될 수 있다.
예를 들어, 일부 실시 예에서는, 대표 값은 단순히 블록 내의 데이터 요소들에 대한 데이터 값들의 합계(또는 블록 내의 데이터 요소들에 대한 데이터 값들 중의 적어도 일부의 합계)를 포함할 수 있다. 일반적으로, 대표 값을 결정하기 위해 임의의 적절한 대수 함수(algebraic)가 블록 내의 데이터 요소들에 대한 데이터 값들에 적용될 수 있음을 알 수 있을 것이다. 이것은 예를 들어 가중합(weighted sum), 또는 제곱합(sum of squares) 또는 기타 파워값(power values)을 결정하는 것을 포함할 수 있다.
특히, 대표 값이 결정되는 방식은 데이터 유형, 예를 들면 원하는 정밀도 레벨에 의존할 수 있다. 예를 들어, 데이터 값들이 루마 값을 나타내는 경우 대표 값은 바람직하게는 제곱된(squared) 데이터 값들의 합계를 사용하여 결정된다. 이것은 루마 값과 인지된 밝기 간의 비선형 관계를 근사화하는 데 적절할 수 있다(즉, 루마 값 128은 루마 값 256의 밝기의 절반이 아니고 실제로 관계는 감마 곡선(gamma curve)으로 설명되고, 거듭제곱(power) 2.2을 포함하므로 제곱(squares)을 합하면 합리적인 근사치를 제공한다). 예를 들어, 컬러(colour)(예를 들어 RGBA) 및 채도(chroma)(UV) 값도 유사한 방식으로 처리될 수 있음을 알 수 있을 것이다.
따라서, 실시 예들에서, 제1 대표 값을 결정하는 것은 블록 내의 데이터 요소들 중 적어도 일부에 대해 데이터 값들의 제곱의 합을 수행하는 것을 포함하고; 각각의 라운딩 모드에 대한 대표 값을 결정하는 것은 블록 내의 데이터 요소들 중 적어도 일부에 대해 수정된 데이터 값들의 제곱의 합을 수행하는 것을 포함하며, 여기서 데이터 요소에 대한 수정된 데이터 값은 라운딩 모드와 연관된 각각의 라운딩 비트 시퀀스를, 데이터 요소에 대한 절단된 데이터 값에 추가함으로써 취득된다.
그러나, 다양한 다른 구성도 물론 가능할 것이며, 대표 값은 원하는 대로 다소 정교한 방식으로 결정될 수 있다.
예를 들어, 대표 값의 하드웨어 계산을 용이하게 하기 위해 다양한 다른 대수 최적화(algebraic optimisations)가 수행될 수 있다. 예를 들어, 이것은 대표 값을 결정하는 데 사용된 함수를 대수적으로 확장하고 결과에 상대적으로 작은 기여만을 제공하는 항(terms)을 제거함으로써 수행될 수 있다.
대표 값은 블록 내의 모든 데이터 요소를 사용하여 계산될 필요가 없으며, 계산은 블록 내의 데이터 요소들의 특정 서브세트만을 사용할 수 있음을 알 수 있을 것이다. 예를 들어, 다른 모든 데이터 요소를 사용하여 대표 값을 계산할 수 있다. 또는 블록 내의 데이터 요소들의 서브 블록을 사용하여 대표 값을 계산할 수 있다. 이것은 원하는 대로 데이터 요소들의 블록에 대한 적절한 대표 값을 여전히 제공하면서 계산을 단순화하는 데 도움이 될 수 있다(특히 단일 블록 내의 데이터 요소들이 유사한 데이터 값들을 가질 것으로 일반적으로 예상될 수 있기 때문에).
일단 블록에 대한 제1 대표 값이 블록 내의 데이터 요소들에 대한 원래 데이터 값들(적어도 일부)을 사용하여 결정되면, 이것이 어떤 방식으로 수행되든, 대응하는 대표 값은 다음에 복수의 이용 가능한 라운딩 모드 중 적어도 하나에 대해, 바람직하게는 각각에 대해 유사한 방식으로 결정된다. 그 다음, 제1 대표 값과 가장 근접하게 일치하는 라운딩 모드를 결정하기 위해 원래 데이터 값들로부터 결정된 제1 대표 값과 복수의 이용 가능한 라운딩 모드 중 적어도 하나에 대해, 바람직하게는 각각에 대해 취득된 대응하는 대표 값 사이에서 비교가 이루어진다. 그런 다음 제1 대표 값에 가장 근접하게 일치하는 라운딩 모드가 블록에 사용되는 라운딩 모드로서 선택된다.
따라서, 상이한 이용 가능한 라운딩 모드에 대해 결정된 대응하는 대표 값들은 바람직하게는 제1 대표 값과 동일한 방식(예를 들어, 동일한 함수를 사용)으로 결정되지만 블록 내의 데이터 요소들에 대한 데이터 값들을 관련 절단된 값들로 대체하고, 각각의 라운딩 비트 시퀀스(들)는 거기에 추가된 라운딩 모드와 관련이 있으며, 즉 원래 데이터 값들을, 각각의 라운딩 모드에 대해 디코딩된 출력에서 생성될 수정된 데이터 값들로 대체한다.
즉, 실시 예들에서, 특정 라운딩 모드와 관련된 대표 값은 관련된 라운딩 비트 시퀀스(들)를 거기에 추가함으로써 절단된 데이터 값들을 수정한 다음, 그러한 수정된 절단된 데이터 값에 근거하여 대표 값을 결정함으로써 결정된다.
예를 들어, 제1 대표 값, X가 원래 데이터 값들의 일부 함수, f에 의해 정의되는 경우, {xi}: X = f(x1, x2,…, xn), 라운딩 코드에 대한 해당 대표 값, YR 는 동일한 함수에 의해 결정될 수 있지만 그 데이터 값, Ri, 즉: YR = f(y1 + R1, y2 + R2,…, yn + Rn)에 대한 적절한 라운딩 변경자에 의해 수정된 절단된 데이터 값 {yi}에 적용될 수 있다.
일부 바람직한 실시 예에서, 각각의 라운딩 모드는, 데이터 요소들의 블록 내의 데이터 요소들의 각각 및 모두에 적용되는 특정 (단일) 라운딩 비트 시퀀스와 관련이 있다(이하에 더 설명되는 바와 같이, 잠재적으로 상이한 비트 위치에 있을지라도).
그러나, 주어진 라운딩 모드는 예를 들어, 원하는 대로 데이터 요소들의 블록 내의 상이한 데이터 요소들에 적용될 수 있는 복수의 라운딩 비트 시퀀스와 관련될 수 있다는 것도 고려되며, 일부 실시 예에서는 이것이 그 경우이다. 이 경우, 관련된 라운딩 모드를 사용할 때 특정 데이터 요소에 적용되는 라운딩 비트 시퀀스는 원하는 대로 임의의 적절한 기준에 근거해서 선택될 수 있다.
예를 들어, 간단한 기준은, 특정 데이터 요소에 적용되는 라운딩 비트 시퀀스가 데이터 요소에 대한 절단된 데이터 값을 나타내는 데 얼마나 많은 최상위 비트가 사용되는지에 근거해서 선택된다는 것일 수 있다(상이한 라운딩 비트 시퀀스가 상이한 데이터 요소들에 대해 얼마나 많은 최상위 비트가 저장되는지에 따라 블록 내의 상이한 데이터 요소들에 적용될 수 있다.)
원하는 대로 어느 데이터 요소가 더 정교한지 덜 정교한지에 적용할 라운딩 비트 시퀀스를 결정하기 위한 기준. 예를 들어, 어떤 경우에는, 특정 라운딩 모드와 관련된 라운딩 비트 시퀀스가 데이터 요소들에 따라 인덱싱(indexed)되어 해당 라운딩 모드가 선택될 때 데이터 요소에 적용될 라운딩 비트 시퀀스가 인덱스(index)로부터 결정될 수 있다(특정 라운딩 모드가 잠재적으로 각 데이터 요소에 상이한 라운딩 비트 시퀀스를 적용할 수 있도록 함).
따라서 일반적으로 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 연관될 수 있다. 또한, 복수의 이용 가능한 라운딩 모드의 세트에 대해, 라운딩 모드 중 일부는 단일 라운딩 비트 시퀀스와 연관될 수 있고 라운딩 모드 중 일부는 복수 라운딩 비트 시퀀스와 연관될 수 있다.
이와 관련하여 다양한 구성이 가능할 것이다.
따라서 각각의 이용 가능한 라운딩 모드는 4, 6 등의 비트(하나 이상의 라운딩 비트 시퀀스)의하나 이상의 미리 결정된 시퀀스(들)와 연관되어 데이터 요소들이 디코딩된 데이터 값들을 취득하기 위해 절단된 데이터 값들에 추가될 수 있다.
라운딩 비트 시퀀스(들)는 임의의 적절한 방식으로 절단된 데이터 값들(대푯값들을 결정할 때, 및 선택된 라운딩 모드를 사용하여 데이터 패킷을 디코딩할 때)에 추가될 수 있다.
특히 바람직한 실시 예에서, 데이터 요소에 대해 라운딩 비트 시퀀스는 데이터 요소에 대한 절단된 데이터 값에 대해 저장된 최상위 비트 바로 뒤에 추가된다. 이것은, 블록 내의 상이한 (예를 들어 모든) 데이터 요소에 대한 절단된 데이터 값에 추가될 라운딩 비트 시퀀스가 동일한 경우에도(일부 바람직한 실시 예에서와같이), 라운딩 비트 시퀀스가, 예를 들어 데이터 요소에 대한 절단된 데이터 값을 나타내는 데 얼마나 많은 최상위 비트가 사용되는지에 따라 상이한 비트 위치에 추가될 수 있다는 것을 의미한다. 따라서, 바람직한 실시 예에서 동일한 라운딩 비트 시퀀스가 블록 내의 모든 데이터 요소에 적용되지만, 추가되는 실제 라운딩 값들은 상이한 데이터 요소에 대해 서로 다를 수 있다.
그러나 물론 다른 구성도 가능할 것이다. 예를 들어, 데이터 값들이 8비트 형식으로 표현되고, 각 데이터 요소에 대해 하나 또는 두 개의 최상위 비트만 저장될 것으로 예상되는 경우, 각 라운딩 비트 시퀀스는, 데이터 요소에 대해 하나 또는 두 개의 최상위 비트가 저장되었는지 여부에 관계없이 제3, 제4 등의 최상위 비트 대신, 즉 동일한 비트 위치에서 데이터 요소(예를 들어 각각)에 대한 절단 된 데이터 값에 추가될 수 있다. 그 경우, 각 데이터 요소에 대해 동일한 라운딩 값이 추가될 수 있다(즉, 동일한 비트 위치에 있는 동일한 라운딩 비트 시퀀스). 다른 예들에서는, 최상위 전송된 비트들 뒤에 라운딩 비트 시퀀스(들)를 추가하는 것보다는, 라운딩 비트 시퀀스(들)는 최하위 비트 대신에 추가될 수 있다.
바람직하게는 각각의 이용 가능한 라운딩 모드에 대해 취득된 제1 대표 값과 대응하는 대표 값 사이에서 비교가 이루어진다. 그러나, 항상 그런 것은 아니다. 예를 들어, 제1 테스트된 이용 가능한 라운딩 모드가 원래 데이터와 정확히 일치하는 경우, 다른 이용 가능한 라운딩 모드를 확인할 필요가 없을 수 있다 (그래서 실시 예들에서는 이것이 수행되지 않을 수 있다).
또한, 이용 가능한 라운딩 모드 중 하나는 '제로(zero)' 모드를 포함할 수 있는데, 즉 추가되는 라운딩 비트 시퀀스는 '0'(또는, 대안으로, 라운딩 비트 시퀀스가 추가되지 않는 경우)이다. 이 경우 대표 값은 절단된 데이터 값에 근거하여 0 모드에 대해 계산된 다음, 다른 이용 가능한 라운딩 모드와 비교될 수 있다.
실시 예들이 데이터 요소들의 단일 블록과 관련하여 위에서 설명되었지만, 바람직하게는 데이터 요소들의 전체 어레이에서 데이터 요소들의 각 블록에 대해 라운딩 모드가 선택되는 것이 바람직하다는 것을 알 수 있을 것이다. 따라서, 각 블록에 대한 원래 데이터 값들의 개선된 재구성을 제공하기 위해 적절히 데이터 요소들의 전체 어레이에서 데이터 요소들의 서로 다른 블록들에 대해 서로 다른 라운딩 모드가 선택될 수 있다(그리고 바람직하게는 선택된다). 그러나, 원칙적으로 블록들의 서브세트, 즉 전체보다 적은 블록만이 이러한 방식으로 처리될 수 있다.
이 접근방식은 디코딩된 출력에서 원래 데이터 값들을 더 잘 표현하는 것으로 밝혀졌는데, 예를 들어, 블록 간 입도(granularity)가 개선되었고, 예를 들어 이는 데이터 요소들의 어레이(예를 들어, 단일 이미지)에 걸쳐 블록 간(from block to block)에, 또는 데이터 어레이들의 시퀀스(예를 들어, 이미지 시퀀스)에서 블록 간에 있을 수 있다.
예를 들어, 어떤 경우에는, 단일 블록 내의 데이터 요소들이 일반적으로 유사한 데이터 값들을 가질 것으로 예상할 수 있다(그럴 필요는 없지만). 예를 들어, 이것은, 블록이 이미지의 일부를 나타내고 데이터 값이 밝기(루마) 값인 경우일 수 있는데, 이미지의 특정 부분(즉, 블록)에 걸친 밝기가 실질적으로 일정할 수 있기 때문이다. 따라서 블록 레벨에서 적절한 라운딩 모드를 적용하면 잘 작동하여 블록별 입도(the block to block granualtiry)를 보다 세밀하게 제어할 수 있고 원래 데이터 값들을 더 잘 재현할 수 있다.
이에 따라, 블록의 크기는 이러한 경우를 보장하기 위해 조정(tailored)될 수 있다. 즉, 실시 예들에서, 데이터 요소들의 블록 내의 모든 데이터 요소들이 예를 들어 특정 범위 내에 있는, 유사한 데이터 값들을 갖도록(갖는 것으로 예상되는) 데이터 요소들의 블록의 크기가 선택될 수 있다. 따라서, 본 발명은, 상술한 문제를 완화하려고 시도하므로, 예를 들어 데이터 요소들의 블록을 인코딩하는 중에 데이터 값들의 비트 시퀀스 표시가 공격적으로 잘린 경우에도(최하위 비트가 데이터 패킷에 포함되지 않도록), 전체 데이터 어레이 내에서 블록들의 겉보기 밝기 레벨(apparent brightness levels)의 더 나은 재생을 제공함으로써, 원래 데이터 어레이의 더 나은 재생을 가능하게 할 수 있다.
블록에 대해 선택된 라운딩 모드는, 원하는 경우, 예를 들어 측파대 정보(sideband information)를 이용해서, 임의의 적절한 방식으로 디코더에 표시될 수 있다.
그러나, 바람직하게는 블록에 사용될 라운딩 모드는 데이터 패킷에서, 바람직하게는 데이터 패킷에 대한 적절한 헤더에서 시그널링된다. 따라서 디코더는 데이터 패킷을 처리할 때 헤더에서 이 정보를 판독하고, 블록을 디코딩할 때 적절한 라운딩 모드를 적용할 수 있다.
본 발명에 따른 개선된 입도는 복수의 이용가능한 라운딩 모드로부터 (가장) 적절한 라운딩 모드를 선택함으로써 달성된다. 따라서 더 많은 수의 이용가능한 라운딩 모드는 입도를 더 증가시킬 수 있다. 그러나, 이용가능한 라운딩 모드에 대한 대표 값을 계산하기 위한 비용과 입도 증가 사이에 트레이드 오프(trade-off)가 있 을 수 있을 뿐만 아니라, 데이터 패킷에 대해 선택된 라운딩 모드를 시그널링하기 위한 증가된 데이터 저장 요구사항이 있을 수 있다.
또한, 라운딩 모드가 데이터 패킷 자체(예를 들어, 헤더)에서 시그널링될 때, 특정 지점 이상으로 라운딩 모드 수를 늘리는 것은 데이터 요소에 대해 더 적은 비트가 전송되었음을 의미하기 때문에 디코딩된 출력의 전체 품질에 더 손상을 줄 수 있다.
이를 고려하여, 2, 4, 8 또는 16개의 라운딩 모드와 같은, 제한된 수의 이용가능한 라운딩 모드만 있는 것이 바람직하다. 이것은 향상된 데이터 충실도(data fidelity)를 제공하는 동시에 라운딩 모드가 비교적 저렴하게 시그널링될 수 있도록 하는 것으로 밝혀졌다. 또한, 라운딩 모드가 적용되고 시그널링되기 때문에, 블록 레벨에서 라운딩 모드가 편리한 방식으로 시그널링될 수 있다(즉, 이것은 데이터 요소들이 인코딩/디코딩되는 레벨이기 때문에).
예를 들어, 하나의 바람직한 실시 예에서는, 4개의 이용가능한 라운딩 모드가 있을 수 있다. 이 경우, 선택한 라운딩 모드는 2비트(만)를 사용하여 시그널링될 수 있다. 원칙적으로 블록에 사용되는 라운딩 비트 시퀀스는 직접 인코딩될 수 있다. 예를 들어, 일부 바람직한 실시 예에서는, 선택된 라운딩 모드는 인코딩된 블록 내의 데이터 요소들에 대한 절단된 데이터 값(각각)에 추가될 비트들의 특정 시퀀스와 관련된다. 이 경우, 라운딩 모드를 시그널링하는 데 사용되는 비트는 추가될 라운딩 비트 시퀀스를 직접 반영할 수 있다. 그러나, 바람직하게는 그것은 (라운딩 비트 시퀀스 자체를 시그널링하려고 시도하기보다는) 시그널링되는 라운딩 모드이며, 이는 임의의 라운딩 모드(원하는 임의의 라운딩 비트 시퀀스(들)와 관련됨)가 그에 따라 시그널링되도록 허용한다. 예를 들어, 4개의 이용가능한 라운딩 모드는 4쌍의 비트 '00', '01', '10' 및 '11'을 사용하여 표시될 수 있으며, 각 비트 쌍은 하나 이상의 미리 결정된 라운딩 비트 시퀀스(들)의 상이한 세트와 관련된 상이한 라운딩 모드를 나타낸다. 일반적으로, 특정 라운딩 모드와 연관된 라운딩 비트 시퀀스(들)가 식별되도록 하는 임의의 적절한 연관이 있을 수 있다. 예를 들어, 실시 예들에서는, 특정 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)는 적합한, 예를 들어 룩업 테이블(look-up table)로부터 취득될 수 있다. 그러나, 이와 관련하여 다양한 다른 구성이 가능할 것이다.
따라서, 2비트만 사용하여 4개의 라운딩 모드(라운딩 비트 시퀀스)를 시그널링할 수 있다. 위에 주어진 예시적인 예에서는, 이것은 샘플 데이터 (및/또는 인코딩 모드를 나타내는 비트 시퀀스 등과 같이, 데이터 패킷에 바람직하게 추가될 수 있는 임의의 추가 정보)에 대해 여전히 126비트를 이용할 수 있음을 의미한다. 이것은 일부 샘플에 대해서 단일 최상위 비트만 전송됨을 의미한다(다른 샘플에는 최상위 비트 2개가 전송됨). 그러나, 이것은 여전히 수용 가능할 수 있으며 정보 손실은 (가장) 적절한 라운딩 모드를 사용하여 적어도 부분적으로 보상될 수 있다.
마찬가지로, 3비트를 사용하면, 8개의 상이한 라운딩 모드 등을 시그널링할 수 있다. 상술한 바와 같이, 라운딩 모드를 시그널링하는 데 필요한 비트 수를 증가시키는 것과 데이터 요소들에 대해 가능한 한 많은 최상위 비트를 인코딩하기 위해 비트를 자유롭게 남겨 두는 것 사이에는 트레이드 오프(trade-off)가 있다.
따라서, 본 발명은 개선된 데이터 충실도를 허용할 수 있고, 특히 데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들의 비트 시퀀스 표시가 데이터 요소들의 블록을 인코딩하는 중에 매우 공격으로 잘린 경우에도, 재구성된 데이터에서 개선된 블록별 입도(block-to-block granularity)를 허용할 수 있다. 또한 이것은 거의 추가 데이터 저장 및/또는 데이터 전송 오버헤드 없이 달성될 수 있다.
바람직한 실시 예들에서는, 상술한 바와 같이, 본 발명은 원시 형태로 주어진 크기를 가지는, 데이터 요소들의 적절한 블록(예를 들어 N x N 블록)을 취하고, 필요한 압축률을 충족하기 위해 예를 들어 원하는 크기의 데이터 패킷으로 해당 블록을 인코딩한다. 이것은 바람직하게는 데이터 요소들의 전체 어레이가 분할된 다양한 블록을 나타내는 복수의 (독립적으로) 인코딩된 데이터 패킷을 포함하는 인코딩된 데이터 스트림을 생성하기 위해 데이터 요소들의 전체 어레이 내의 데이터 요소들의 다른 블록들에 대해 반복된다.
따라서, 본 발명의 실시 예들은 주어진 데이터 어레이를 각각 고정된 크기를 갖는 데이터 패킷의 스트림으로 압축할 수 있다. 예를 들어, 본 발명은 원래 크기의 1/2 또는 1/3과 같은, 고정된 (선택된) 비트 레이트로 압축할 수 있다. 예를 들어, 원시 형태의 64 바이트인 블록은 예를 들어 블록당 32 바이트의 고정 레이트(1/2 레이트 압축)로 압축될 수 있다. 마찬가지로, (예를 들어, 8 x 8 YUV420 블록의 경우일 수 있는) 96 바이트를 가진 원시 블록은 48 바이트(1/2 레이트) 또는 32 바이트(1/3 레이트)로 압축될 수 있다.
위에서 설명한 "원시" 인코딩 방식은 데이터 요소들의 어레이가 매우 복잡하거나 임의의 데이터를 나타낼 때 특히 적합할 수 있다. 그러나, 특정 다른 유형의 데이터에 더 적합할 수 있는 다양한 다른 보다 정교한 인코딩 방식이 또한 존재한다는 것을 이해할 것이다. 예를 들어, 이러한 방식은 보다 효율적인 인코딩을 제공하기 위해 데이터에서 예상된 동작을 이용할 수 있다(그러나 데이터가 예상된 동작과 일치하지 않을 때 어떤 방식이 덜 효율적일 수 있는지). 예를 들어, 주파수 도메인으로 변환된 내추럴 이미지 데이터에 대해서는, 효율적으로 인코딩될 수 있는, '0'의 선두 시퀀스(leading sequence)가 있을 것으로 예상할 수 있다.
즉, 출원인은 또한 본 발명의 "원시" 인코딩 구성이 특정 형태의 입력 데이터에 적합하지 않을 수 있음을 인식했다. 따라서, 인코더는 실시 예들에서 본 발명에 따라 기술된 특정 인코딩 방식을 사용할 때 덜 적합할 수 있는 경우를 인식할 수 있으며, 이 경우 바람직하게는 입력 데이터를 상이한 방식으로 인코딩하고, 그것이 이미 행해졌음을 디코더에 표시할 수 있다.
따라서, 인코더는 입력 데이터에 근거하여 복수의 상이한 이용가능한 인코딩 방식 사이에서 선택할 수 있다. 인코더는 다양한 적절한 방식으로 입력 데이터에 근거하여, 예를 들어 적절한 매트릭(metric)에 근거하여 인코딩 방식을 선택할 수 있다. 예를 들어, 실시 예들에서는, 인코더는 데이터 요소들의 어레이에 대해 주파수 변환 동작을 수행 한 다음, 변환된 계수(coefficients)의 절대 값의 합 등과 같은 적절한 메트릭에 근거하여 인코딩 방식을 선택할 수 있다. 그러나 물론 다양한 다른 구성도 가능하다.
예를 들어, 데이터가 이미지 데이터인 경우, 경우에 따라서는 먼저 주파수 도메인 변환을 수행한 다음, 주파수 도메인 계수의 비트 플레인 코딩(bit plane coding)을 수행함으로써 이를 인코딩하는 것이 더 효율적일 수 있다. 이것이 단순히 원시 데이터 값을 인코딩하는 것보다 더 효율적인지 여부는 일반적으로 이미지 데이터의 복잡성에 의존할 것이다. 따라서 예를 들어 데이터 값들(주파수 도메인에서)을 합산함으로써 검사를 수행하여, 어떤 인코딩 방식이 최상의 결과를 제공할 것인지 결정한 다음, 해당 인코딩 방식을 선택할 수 있다.
그러므로 상술한 원시 인코딩 방식은 일부 바람직한 실시 예에서는 또 다른 인코딩 방식과 함께 사용될 수 있다. 따라서, 인코더(회로)는 데이터 요소들의 어레이를 분석하고 (복수의 이용가능한 인코딩 방식으로부터) 사용될 인코딩 방식을 결정할 수 있다. 예를 들어, 어떤 인코딩 방식이 사용될 것인지 결정하는 것은 초기 단계, 인코딩의 앞부분(up-front)에서 수행될 수 있다. 대안적으로, 일부 바람직한 실시 예에서는, 어느 인코딩 방식이 사용될 것인지의 결정은 복수의 상이한 이용가능한 인코딩 방식을 적용하는 것과 병렬로 수행될 수 있으며, 그 후 사용될 인코딩 방식이 마지막에 선택된다. 이는 입력 레이턴시(input latency)를 줄이는 데 도움이 될 수 있다. 이와 관련하여 다양한 구성이 가능할 것이다.
따라서, 실시 예들에서는, 인코더는 2개(또는 그 이상의) 인코딩 방식 사이에서 선택할 수 있다. 이것은 또한 데이터 패킷에 대해 (바람직하게는 데이터 패킷에서) 시그널링될 수 있다. 예를 들어, 헤더는 또한 사용중인 인코딩 방식을 나타낼 수 있다.
본 명세서에 기술된 임의의 실시 예에서는, 데이터 요소들의 어레이(들)는 임의의 원하는 적절한 형태를 취할 수 있다. 따라서, 그레이스케일 이미지 데이터의 맥락에서 한 예가 위에서 주어졌지만, 본 발명은 그러한 데이터에 제한되지 않고 원하는 대로 임의의 적절한 이미지 또는 비이미지 데이터를 처리할 때 일반적으로 사용될 수 있다는 것을 이해할 것이다. 따라서, 바람직한 실시 예들은 이미지 및/또는 비디오 데이터를 포함하는 데이터 어레이(들)와 관련이 있는 반면, 데이터 어레이 구성의 다른 예들은 원한다면 가능할 것이고 일반적으로 데이터 요소들의 어레이(들)는 적절하게 또는 바람직하게는 본 발명에 따라 인코딩될 수 있는 임의의 데이터 어레이를 포함할 수 있다.
데이터 요소들의 어레이(들)는 바람직하게는 값들의 공간 분포(spatial distribution)를 나타낸다. 즉, 데이터 요소들의 어레이(들)는 공간 도메인에 분포되는 데이터 값들의 세트를 나타낸다. 그래서, 각 데이터 요소는 공간 분포 내의 특정 위치에서의 데이터 값을 나타낼 수 있다. 따라서, 실시 예들에서는, 데이터 요소들의 어레이(들)는 (각각) 데이터 위치의 어레이에 대응할 수 있다.
바람직한 실시 예들에서는, 데이터 요소들 또는 위치들의 어레이(들)는 정지 이미지 또는 비디오 프레임(예를 들어, 디스플레이용)과 같은 원하는 (예를 들어 이미지) 출력의 전부 또는 일부에 대응할 수 있다. 즉, 데이터 요소들의 어레이(들)는 바람직하게는 이미지 데이터의 어레이(들), 즉 디스플레이용 이미지를 생성하는 데 사용될 수 있는 데이터를 포함한다. 따라서, 데이터의 어레이는 실시 예들에서는 인코딩될 단일 정지 이미지에 대응할 수 있다. 다른 실시 예들에서는, 데이터의 어레이는 인코딩될 비디오 프레임들의 스트림의 비디오 프레임에 대응할 수 있다.
일부 바람직한 실시 예에서는, 데이터 요소들의 어레이(들)는 그레이스케일 이미지 데이터의 어레이(들)를 포함한다. 특히, 데이터 값들은 루마 값들을 나타낼 수 있다. 그러나, 데이터가 그레이스케일 이미지 데이터를 포함할 필요가 없고 본 발명이 컬러(예를 들어, RGBA) 이미지 데이터에 동일하게 적용될 수 있다는 것이 이해될 것이다. 그 경우, 상술한 접근방식은, 예를 들어 모든 색상 채널에 걸쳐 데이터 값에 대해 적절하게 대표되는 "공통(common)" 값을 결정함으로써, 각 채널(RGBA)에 대해 개별적으로 사용되거나, 채널에 대해 집합적으로 사용될 수 있다.
일반적으로, 데이터 요소들과 원하는 출력 사이에는 원하는 적절한 대응이 있을 수 있다. 예를 들어, 블록 내의 데이터 요소들은 각각 원하는 출력의 픽셀 또는 픽셀들에 대응할 수 있다. 데이터 요소들의 블록은 데이터 요소들 또는 위치들과 관련하여 임의의 원하는 적절한 크기 또는 형상일 수 있지만, 어떤 실시 예에서는 직사각형(정사각형 포함)이다. 데이터 요소들은 2차원 데이터를 나타낼 수 있지만, 1차원, 3차원 또는 고차원 데이터를 나타낼 수도 있다. 데이터 요소들은 예를 들어 이미지 데이터 값들(예를 들어 루마 또는 컬러 값)을 나타내는 임의의 원하는 적절한 형식을 가질 수도 있다.
본 명세서에 기술된 어떤 실시 예에서는, 데이터 요소들의 어레이(들)는 임의의 원하는 적절한 방식으로 제공될 수 있다. 실시 예들은 어레이(들)의 데이터 요소들(적어도 일부 또는 전부)을 생성하는 것을 포함할 수 있다. 실시 예들은 또한 또는 대신에 어레이(들)의 데이터 요소들(적어도 일부 또는 전부)을 예를 들어, 메모리로부터 판독하는 것을 포함할 수 있다.
어레이(들)의 데이터 요소들은 임의의 원하는 적절한 방식으로 생성될 수 있다. 실시 예들에서는, 어레이들의 데이터 요소들은 비디오 카메라와 같은 카메라에 의해 생성될 수 있다. 다른 실시 예들에서는, 어레이들의 데이터 요소들을 생성하는 것은 렌더링 프로세스를 포함할 수 있다. 렌더링 프로세스는 어레이들의 데이터 요소들에 의해 표현되는 데이터 값들을 유도하는 것을 포함할 수 있다(예를 들어, 그래픽 프래그먼트(graphics fragments)를 생성하기 위해 프리미티브(primitives)를 래스터화하고/하거나 그래픽 프래그먼트를 렌더링함으로써). 어레이들의 데이터 요소들을 생성하기 위해 그래픽 프로세서(그래픽 처리 파이프라인)가 사용될 수 있다. 그래픽 처리 파이프라인은, 어레이들의 데이터 요소들을 생성하기 위해, 버텍스 쉐이더(vertex shader), 래스터화 스테이지(래스터라이저(rasteriser)) 렌더링 스테이지(렌더러(renderer)) 등과 같이, 그래픽 파이프라인 및 프로세서가 포함할 수 있는 임의의 적절하고 원하는 처리 스테이지들을 포함할 수 있다.
본 발명에서는, 데이터 어레이(들)의 데이터 요소들은 예를 들어 블록 단위로 데이터 요소들의 "블록"으로서 인코딩된다. 예를 들어, 데이터 요소들의 어레이(들)는 블록 단위로 인코딩될 복수의 소스 블록으로 분할될 수 있다. 따라서, 데이터 어레이 또는 데이터 어레이의 데이터 요소들을 처리 또는 인코딩하는 것에 대한 본 명세서의 어떤 참조든 그러한 데이터 요소들의 블록들을 처리하거나 인코딩하는 것을 포함(include)하는 것으로 간주되어야 하고, 전형적으로는 포함한다. "블록"은 일반적으로 데이터 요소들의 N x N 어레이를 포함할 수 있다.
따라서, 예를 들어 전체 프레임(이미지)을 나타내는, 데이터 요소들의 (전체) 어레이를 인코딩할 때, 데이터 요소들의 (전체) 어레이는 복수의 블록으로 분할되고, 각 블록은 대응하는 데이터 패킷들의 세트를 제공하기 위해 본 발명의 인코딩 방식에 따라 인코딩된다. 바람직한 실시 예들에서는, 더 큰 데이터 요소들의 어레이 내의 데이터 요소들의 각 블록은 고정 크기 데이터 패킷으로 인코딩 (압축)된다. 따라서, 바람직한 실시 예에서는, 고정 크기 데이터 패킷으로 인코딩되고 있는 데이터 요소들의 블록은 더 큰 전체 데이터 어레이로부터의 데이터 요소들의 블록을 포함한다(그리고 이것은 바람직하게는 전체 데이터 어레이를 구성하는 복수의 블록 각각에 대해 반복된다). 각 블록에 대한 데이터 패킷은 데이터 요소들의 전체 어레이를 나타내는 인코딩된 데이터 스트림으로 특정 순서로 적절하게 결합될 수 있다.
따라서, 본 발명은 블록 기반 방식이고, 각 블록은 바람직하게는 독립적으로 인코딩되어, 블록들이 독립적으로 디코딩될 수 있다. 이것은 본 발명을 사용하여 인코딩된 프레임들 내의 블록들에 대한 랜덤 액세스를 용이하게 할 수 있다. 예를 들어, 일반적으로 데이터 패킷(블록)당 얼마나 많은 바이트가 있는지 알 수 있으며, 따라서 메모리 내의 개별 블록의 위치를 쉽게 식별할 수 있으므로 로드(load) 및 랜덤 액세스가 용이하다.
데이터 요소들은 예를 들어 기준 프레임 또는 블록과 비교하여 차이 값(difference values)을 포함할 수 있다. 그러나, 더 자주, 인코딩 방식은 원시 데이터를 인코딩하는 데 사용되므로, 데이터 요소들은 (원시) 픽셀 값들을 나타낼 수 있다.
본 발명은 또한 데이터 요소들의 어레이 자체를 인코딩하는 프로세스 및 이러한 방법을 수행하기 위한 인코더(회로)로 확장된다.
본 발명의 또 다른 측면에 따르면, 데이터 요소들의 어레이를 인코딩하는 방법이 제공되며, 각 데이터 요소는 각각의 비트 시퀀스로 표시되는 관련 데이터 값을 가지며, 상기 방법은,
데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해,
데이터 요소들의 데이터 값들에 대한 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 절단된 데이터 값들로서 나타내는 단계와,
복수의 이용가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 단계를 포함하고, 각 라운딩 모드가 하나 이상의 라운딩 비트 시퀀스(들)와 연관되고, 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드는,
데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 근거하여 데이터 요소들의 블록에 대한 제1 대표 값을 결정하는 것과,
복수의 이용가능한 라운딩 모드 중 적어도 하나에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하며, 여기서 라운딩 모드에 대한 대표 값은 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 근거하여 결정되는 것과,
복수의 이용가능한 라운딩 모드 중 어느 것이 제1 대표 값에 가장 가까운 대표 값을 제공하는지 결정하기 위해 복수의 이용가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값과 데이터 값들에 근거한 데이터 요소들의 블록에 대한 제1 대표 값을 비교하는 것과,
복수의 이용가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 근거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 것에 의해 선택되며,
상기 방법은,
데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 데이터 패킷에 제공함으로써 데이터 요소들의 블록을 인코딩하는 단계를 더 포함한다.
본 발명의 추가 측면에 따르면, 데이터 요소들의 어레이를 인코딩하기 위한 인코더가 제공되며, 각 데이터 요소는 각각의 비트 시퀀스에 의해 표시되는 관련된 데이터 값을 가지며, 상기 인코더는,
데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해서,
데이터 요소들의 데이터 값들에 대해 각각의 비트 시퀀스들의 하나 이상의 최상위 비트의 서브세트를 사용하여 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 절단된 데이터 값들로서 나타내고,
복수의 이용가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록 구성되는 인코딩 회로를 구비하고, 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 연관되며, 여기서 라운딩 모드의 선택은,
데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 근거하여 데이터 요소들의 블록에 대한 제1 대표 값을 결정하고,
복수의 이용가능한 라운딩 모드 중 적어도 하나에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하고, 여기서 라운딩 모드에 대한 대표 값은 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 근거하여 결정되며,
데이터 요소들의 블록에 대해 결정된 제1 대표 값을 복수의 이용가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값과 비교하여 복수의 이용가능한 라운딩 모드 중 어느 것이 제1 대표 값에 가장 가까운 대표 값을 제공하는지 결정하고,
복수의 이용가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 근거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록
구성되는 라운딩 모드 선택 회로에 의해 수행되며,
상기 인코딩 회로는,
데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값들을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 데이터 패킷에 제공함으로써 데이터 요소들의 블록을 인코딩하도록 더 구성된다.
이들 추가 측면에 따른 인코더(인코딩 회로) 및 인코딩 방법은 본 발명의 다른 측면들과 관련하여 위에서 설명된 어떤 특징이든 포함할 수 있다.
따라서, 본 발명의 인코딩은 고정 크기 데이터 패킷들의 시퀀스(예를 들어, 각각이 데이터 요소들의 어레이(또는 블록)를 나타냄)를 바람직하게 포함하는 데이터 스트림을 생성한다. 인코더에 의해 생성된 인코딩된 데이터 스트림은 저장을 위해 (예를 들어, 후속 디코딩 및/또는 전송을 위해) 메모리에 출력될 수 있거나 (예를 들어, 후속 디코딩 및 선택적으로 디스플레이를 위해) 외부 장치에 출력될 수 있다.
데이터 패킷으로 인코딩된 데이터를 나중에 액세스하거나 사용하려는 경우, 데이터 패킷은 디코더(회로)에 전달되어 디코딩될 수 있다.
따라서 디코더(회로)는 예를 들어 그것의 헤더를 판독함으로써, 먼저 데이터 패킷을 분석하여, 데이터 패킷이 위와 같은 방식으로 인코딩되었는지, 라운딩 모드가 선택되었는지 여부를 결정한다.
디코더(회로)가 데이터 패킷에 사용될 라운딩 모드를 식별했으면, 디코더(회로)는 인코딩된 블록에서의 각 데이터 요소에 대해 절단된 데이터 값을 추출한 다음, 디코딩된 출력을 생성하기 위해 표시된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 데이터 요소들에 추가한다.
본 발명은 또한 본 발명의 방식으로 인코딩된 데이터를 디코딩하기 위한 대응하는 방법 및 장치로 확장된다.
본 발명의 또 다른 측면에 따르면, 하나 이상의 데이터 패킷(들)을 포함하는 데이터 스트림을 디코딩하는 방법이 제공되며, 각 데이터 패킷은 데이터 요소들의 어레이 내의 데이터 요소들의 블록을 인코딩하며, 여기서 블록 내의 각 데이터 요소는 관련된 인코딩된 데이터 값을 가지며, 여기서 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터가 데이터 패킷에 대해 제공되고, 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되고, 상기 방법은,
데이터 패킷으로 인코딩된 데이터 요소들의 블록에서 하나 이상의 데이터 요소(들)에 대한 데이터 값(들)을 사용하고자 하는 경우,
데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 인코딩된 데이터 값(들)을 추출하기 위해 데이터 패킷을 판독하는 단계와,
데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 식별하는 단계와,
식별된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 인코딩된 데이터 값(들)에 추가하여 데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하는 단계를 포함한다.
추가 측면에 따르면, 하나 이상의 데이터 패킷(들)을 포함하는 데이터 스트림을 디코딩하기 위한 디코더가 제공되며, 각 데이터 패킷은 데이터 요소들의 어레이 내의 데이터 요소들의 블록을 인코딩하며, 여기서 블록 내의 각 데이터 요소는 관련된 인코딩된 데이터 값을 포함하고, 여기서 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터가 데이터 패킷에 제공되고, 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 상기 디코더는,
데이터 패킷으로 인코딩된 데이터 요소들의 블록에서 하나 이상의 데이터 요소(들)에 대한 데이터 값(들)을 사용하고자 하는 경우,
데이터 요소들의 블록에서 하나 이상의 데이터 요소(들)에 대한 인코딩된 데이터 값(들)을 추출하기 위해 데이터 패킷을 판독하고,
데이터 패킷을 디코딩할 때 사용할 라운딩 모드를 식별하며,
식별된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 인코딩된 데이터 값(들)에 추가하여 데이터 요소들의 블록에서 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하도록 구성된 디코딩 회로를 구비한다.
일반적으로, 디코더는 인코딩된 원래 소스 데이터(예를 들어 이미지)의 (손실) 표시를 복구하기 위해 데이터 패킷들을 디코딩한 다음, 원하는 대로 이 데이터를 사용(예를 들어 디스플레이)하도록 동작할 수 있다. 따라서, 데이터 패킷이 디코딩되면, 디코더는 디코딩된 데이터 패킷을 사용하여 취득된 데이터를 디스플레이하거나 디스플레이를 위해 출력하도록 구성될 수 있다.
상술한 인코딩 및 디코딩 장치는 일반적으로 데이터 처리 시스템의 일부로서 제공될 수 있다. 예를 들어, 장치는 디지털 카메라, 휴대폰 또는 태블릿과 같은, 카메라를 포함하는 이미지 및/또는 비디오 처리 시스템의 일부를 포함할 수 있다.
일반적으로, 어떤 실시 예에서 여기에 기술된 프로세스는 어떤 원하는 적절한 장치에 의해 수행될 수 있다. 예를 들어, 어떤 실시 예에서 여기에 기술된 프로세스는 이미지 또는 비디오 프로세서(코덱)에 의해 수행될 수 있다. 따라서 어떤 실시 예에서 여기에 기술된 데이터 처리 장치는 비디오 프로세서를 포함할 수 있거나 비디오 프로세서일 수 있다. 따라서, 어떤 실시 예에서 여기에 기술된, 처리(인코딩/디코딩) 회로, 출력 회로, 헤더 생성 회로, 헤더 판독 회로 또는 입력 회로 등은 비디오 프로세서의 일부를 형성할 수 있다. 어떤 실시 예에서 여기에 기술된 데이터 처리 장치는 시스템 온 칩(SoC)을 포함하거나 그 일부일 수 있거나 그 일부를 형성할 수 있다.
본 기술분야의 당업자에 의해 이해되는 바와 같이, 여기에 기술된 본 발명의 인코딩/디코딩 장치는 예를 들어 호스트(예를 들어, 중앙) 프로세서를 포함하는 전체 데이터 처리 시스템의 일부일 수 있다. 예를 들어, 호스트 프로세서는 인코딩/디코딩 장치에 의한 데이터 처리가 필요한 애플리케이션을 실행할 수 있다. 호스트 프로세서는 적절한 명령 및 데이터를 인코딩/디코딩 장치에 전송하여 데이터 인코딩/디코딩 동작을 수행하고 호스트 프로세서에서 실행되는 애플리케이션에 필요한 출력을 생성 및/또는 사용하도록 제어할 수 있다. 이를 용이하게 하기 위해, 호스트 프로세서는 인코딩/디코딩 장치를 위한 드라이버를 실행할 수 있다.
실시 예들에서는, 장치 또는 시스템은 여기에 기술된 데이터를 저장하고, 및/또는 여기에 기술된 프로세스를 수행하기 위한 소프트웨어를 저장하는 하나 이상의 메모리 및/또는 메모리 장치를 구비할 수 있고/있거나 그와 통신할 수 있다. 장치 또는 시스템은 어레이들의 데이터 요소들에 근거하여 이미지들을 디스플레이하기 위한 디스플레이를 구비할 수 있고/있거나 그와 통신할 수 있다. 장치 또는 시스템은 데이터 요소들의 어레이들을 생성하는 카메라를 포함할 수 있고/있거나 카메라와 통신할 수 있다.
본 명세서에서 언급된 메모리는 데이터 처리 장치의 어떤 원하는 적절한 메모리일 수 있거나 데이터 처리 장치를 위한 어떤 원하는 적절한 메모리일 수 있다. 메모리는 예를 들어 비디오 프로세서 및/또는 시스템 온 칩(SoC)과 같은, 데이터 처리 장치의 외부에 있을 수 있다. 메모리는 예를 들어 메인 시스템 메모리일 수 있다.
본 명세서에 기술된 본 발명은 디스플레이를 위한 이미지 또는 프레임과 같이, 데이터 처리 장치가 제공 및/또는 사용할 수 있는 모든 형태의 데이터 어레이에 사용될 수 있다. 따라서, 상술한 바와 같이, 데이터 요소들의 어레이들은 이미지 데이터를 포함할 수 있고/있거나 이미지 데이터의 이미지 또는 프레임에 대응할 수 있다.
일 실시 예에서, 본 명세서에 기술된 본 발명의 다양한 기능은 데이터 요소들의 어레이들을 제공 및/또는 사용하는 단일 데이터 (예를 들어, 이미지) 처리 플랫폼에서 수행된다.
본 명세서에 기술된 본 발명은 적절하게 구성된 컴퓨터 또는 마이크로프로세서 기반 시스템과 같은, 어떤 적절한 시스템에서 구현될 수 있다. 일 실시 예에서, 본 명세서에 기술된 본 발명은 컴퓨터 및/또는 마이크로프로세서 기반 시스템에서 구현된다.
본 명세서에 기술된 본 발명의 다양한 기능은 어떤 원하는 적절한 방식으로 수행될 수 있다. 예를 들어, 본 명세서에 기술된 본 발명의 단계 및 기능은 원하는 대로 하드웨어 또는 소프트웨어로 구현될 수 있다. 따라서, 예를 들어, 달리 표시되지 않는 한, 본 명세서에 기술된 본 발명의 다양한 회로, 기능요소, 스테이지, 및 "수단(means)"은, 원하는 방식으로 동작하도록 프로그래밍될 수 있는 프로그래머블 하드웨어 요소(처리 회로/회로망) 및/또는 적절한 전용 하드웨어 요소(처리 회로(circuits)/회로망(circuitry))와 같이, 다양한 단계 또는 기능 등을 수행하도록 작동할 수 있는, 적절한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛, 회로(circuits), 회로망(circuitry), 처리 로직, 마이크로프로세서 장치(microprocessor arrangements) 등을 구비할 수 있다.
특히, 인코더는 원하는 대로 하드웨어 또는 소프트웨어로 구현될 수 있다는 것이 고려된다. 따라서, 예를 들어, 인코더는 원하는 방식으로 동작하도록 프로그래밍될 수 있는 프로그래머블 하드웨어 요소(처리 회로/회로망) 및/또는 적절한 전용 하드웨어 요소(처리 회로/회로망)와 같이 본 명세서 기술된 바와 같은, 다양한 인코딩 단계 또는 기능 등을 수행하도록 동작할 수 있는, 적절한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛, (인코딩) 회로/회로망, 처리 로직, 마이크로프로세서 장치 등을 구비할 수 있다.
마찬가지로, 디코더는 원하는 대로 하드웨어 또는 소프트웨어로 구현될 수 있다. 따라서, 예를 들어, 디코더는 원하는 방식으로 동작하도록 프로그래밍될 수 있는 프로그래머블 하드웨어 요소(처리 회로/회로망) 및/또는 적절한 전용 하드웨어 요소(처리 회로/회로망)와 같이 본 명세서에 기술된 바와 같은, 다양한 인코딩 단계 또는 기능 등을 수행하도록 동작할 수 있는, 적절한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛, (디코딩) 회로/회로망, 처리 로직, 마이크로프로세서 장치 등을 구비할 수 있다.
여기에 기술된 본 발명의 다양한 단계 또는 기능 등은 주어진 프로세서에서 복제 및/또는 병렬로 수행될 수 있다. 마찬가지로, 다양한 처리 스테이지는 원하는 경우 처리 회로/회로망 등을 공유할 수 있다.
상술한 특정 단계 또는 기능 등을 수행하는 데 필요한 하드웨어에 따라, 시스템은 달리 데이터 처리 장치 및/또는 시스템이 포함하는 하나 이상 또는 모든 일반적인 기능 유닛 등을 포함할 수 있다.
다양한 데이터 처리 스테이지는 그에 따라 원하는 대로 어떤 적절한 방식으로 구현될 수 있으며, 각각 어떤 원하는 적절한 기능을 수행할 수 있다. 유사하게, 다양한 데이터는 어떤 적절하고 원하는 방식으로 정의 및 저장될 수 있다.
또한, 본 명세서에 기술된 본 발명의 기술된 모든 실시 예가 본 명세서에 기술된 하나 이상 또는 모든 특징을 적절하게 포함할 수 있고, 일 실시 예에서는 포함한다는 것이 본 기술분야의 당업자에 의해 인식될 것이다.
본 명세서에 기술된 본 발명에 따른 방법은, 소프트웨어, 예를 들어 컴퓨터 프로그램을 사용하여 적어도 부분적으로 구현될 수 있다. 따라서, 본 명세서에 기술된 본 발명의 추가 실시 예들은, 데이터 프로세서에 설치될 때 본 명세서에 기술된 방법을 수행하도록 특별히 적응된 컴퓨터 소프트웨어와, 프로그램 요소가 데이터 프로세서에서 실행될 때 본 명세서에 기술된 방법을 수행하기 위한 컴퓨터 소프트웨어 코드 부분을 포함하는 컴퓨터 프로그램 요소와, 프로그램이 데이터 프로세서에서 실행될 때 본 명세서에 기술된 방법 또는 방법들의 모든 단계를 수행하도록 적응된 코드를 포함하는 컴퓨터 프로그램을 포함한다. 데이터 프로세서는 마이크로프로세서 시스템, 프로그래머블 FPGA(field programmable gate array) 등일 수 있다.
본 명세서에 기술된 본 발명은 또한 데이터 프로세서를 포함하는 데이터 처리 장치 또는 시스템을 작동시키는 데 사용될 때, 상기 장치 또는 시스템이 상기 데이터 프로세서와 함께 본 명세서에 기술된 본 발명의 방법의 단계를 수행하게 하는 그러한 소프트웨어를 포함하는 컴퓨터 소프트웨어 캐리어로도 확장된다. 이러한 컴퓨터 소프트웨어 캐리어는 ROM 칩, CD ROM, RAM, 플래시 메모리, 또는 디스크와 같은 물리적 저장 매체일 수 있거나, 유선을 통한 전자 신호, 광 신호 또는 위성 등과 같은 무선 신호와 같은 신호일 수 있다.
본 명세서에 기술된 본 발명의 방법의 모든 단계가 컴퓨터 소프트웨어에 의해 수행될 필요는 없으며 따라서 추가 실시 예들에서는 본 명세서에 설명된 방법의 단계들 중 적어도 하나를 수행하기 위한 컴퓨터 소프트웨어 캐리어에 설치된 컴퓨터 소프트웨어 및 그러한 소프트웨어를 포함한다는 것이 또한 인식될 것이다.
본 명세서에 기술된 발명은 따라서 컴퓨터 시스템과 함께 사용하기 위한 컴퓨터 프로그램 제품으로서 적절하게 구현될 수 있다. 이러한 구현은 컴퓨터 판독 가능 매체, 예를 들어 디스켓, CD, DVD, ROM, RAM, 플래시 메모리, 또는 하드 디스크와 같은, 유형(tangible)의 비일시적 매체에 고정된 일련의 컴퓨터 판독가능 명령어를 포함할 수 있다. 그것은 또한 광학 또는 아날로그 통신 회선을 포함하되 이에 국한되지 않는 유형의 매체를 통해, 또는 마이크로파, 적외선 또는 다른 전송 기술을 포함하되 이에 제한되지 않는 무선 기술을 무형적으로 사용하여, 모뎀이나 다른 인터페이스 장치를 통해 컴퓨터 시스템으로 전송 가능한 일련의 컴퓨터 판독 가능한 명령어를 포함할 수 있다. 일련의 컴퓨터 판독 가능한 명령어는 본 명세서에서 이전에 기술된 기능의 전부 또는 일부를 구현한다.
본 기술분야의 당업자는, 이러한 컴퓨터 판독 가능한 명령어가 많은 컴퓨터 아키텍처 또는 운영 체제와 함께 사용하기 위한 다수의 프로그래밍 언어로 기록될 수 있음을 인식할 것이다. 또한, 그러한 명령어들은 반도체, 자기, 또는 광학을 포함하지만 이에 제한되지 않는, 현재 또는 미래의 어떤 메모리 발명을 사용하여 저장될 수 있거나, 광학, 적외선, 또는 마이크로파를 포함하지만 이에 제한되지 않는, 현재 또는 미래의 어떤 통신 발명을 사용하여 전송될 수 있다. 그러한 컴퓨터 프로그램 제품은 예를 들어 시스템 ROM 또는 고정 디스크에 컴퓨터 시스템이 미리 로드된(pre-loaded) 수축 포장(shrink wrapped) 소프트웨어와 같은 인쇄 또는 전자 문서와 함께 이동식 매체로서 배포될 수 있거나, 네트워크를 통한 서버 또는 전자 게시판, 예를 들어 인터넷이나 월드 와이드 웹(World Wide Web)으로부터 배포될 수 있다고 간주된다.
본 명세서에 기술된 본 발명의 다양한 실시 예는 지금부터는 단지 예로서 그리고 첨부 도면을 참조하여 설명될 것이다.
도 1은 본 명세서에 기술된 본 발명의 실시 예들이 구현될 수 있는 데이터 처리 시스템의 예를 개략적으로 도시한다.
도 2는 일 실시 예에 따른 인코딩 방식을 개략적으로 예시하는 흐름도이다.
도 3은 일 실시 예에 따라 생성된 압축된 데이터 패킷의 예를 개략적으로 도시한다.
도 4는 일 실시 예에 따른 디코딩 방식을 개략적으로 예시하는 흐름도이다. 과
도 5는 본 발명의 기술을 사용하지 않고 실시 예와 인코딩 방식 사이의 비교를 나타낸다.
도면은 본 명세서에 기술된 본 발명의 실시 예와 관련된 데이터 처리 장치 및 시스템의 요소들을 도시한다. 도면에서 같은 참조 번호는 적절한 경우 동일한 요소를 나타낸다.
본 기술분야의 당업자에 의해 이해되는 바와 같이, 도면에 도시되지 않은 데이터 처리 장치 및 시스템의 다른 요소들이 있을 수 있다. 여기서도 도면은 개략적일 뿐이며, 예를 들어 실제로 도시된 요소들은 도면에서 개별 요소로서 개략적으로 도시되지만(또는 반대로, 요소들이 중요한 하드웨어 회로를 공유하는 것으로 표시되는 경우, 이들은 실제로는 별도의 요소들을 포함할 수 있다), 중요한 하드웨어 회로를 공유할 수 있다는 점에 유의해야 한다.
도 1은 본 발명의 방식으로 인코딩된 디스플레이용 이미지 또는 비디오 프레임과 같은, 데이터 어레이를 제공하고 사용할 수 있는 데이터 처리 시스템(100)의 실시 예를 개략적으로 도시한다. 도 1은 단지 본 발명과 함께 사용하기에 적합한 시스템의 한 예를 도시하고, 다양한 다른 구성이 가능하다는 것을 이해할 것이다.
이 실시 예에서, 시스템(100)은 시스템 온 칩(SoC)(102) 형태의 데이터 처리 장치를 구비한다. 시스템(100)은 또한 오프 칩 (메인) 메모리(116), 디스플레이 장치(118) 및 비디오 카메라(120)를 포함한다.
SoC(102)는 중앙 처리 장치(CPU)(104), 그래픽 처리 장치(GPU)(106), 이미지/비디오 프로세서(108), 디스플레이 제어기(110), 인터커넥트(112) 및 메모리 제어기(114)를 포함한다.
도 1에 도시된 바와 같이, CPU(104), GPU(106), 이미지/비디오 프로세서(108) 및 디스플레이 제어기(110)는 인터커넥트(112)를 통해 서로 통신하고 인터커넥트(112) 및 메모리 제어기(114)를 통해 메모리(116)와 통신한다. 디스플레이 제어기(110)는 또한 디스플레이 장치(118)와 통신한다. 비디오 카메라(120)는 또한 인터커넥트(112)를 통해 SoC(102)와 통신한다.
실시 예들에서는, 이미지/비디오 프로세서(108)는 메모리(116)로부터 이미지 데이터를 판독하고, 적절한 인코더 회로(122)를 사용하여 이미지 데이터를 (예를 들어, 본 발명의 방식으로) 인코딩한 다음, 예를 들어 메모리(116)에 저장하거나 또 다른 장치로 스트리밍(streaming)하기 위해 그 인코딩된 이미지 데이터를 출력한다. 인코딩된 이미지 데이터는 나중에 예를 들어 이미지/비디오 프로세서(108)의 적절한 디코더 회로(124)에 의해 검색 및 디코딩할 수 있거나, 또 다른 장치에 의해 수신 및 디코딩될 수 있다. 이미지/비디오 프로세서(108)가 별도의 인코더 회로(122) 및 디코더 회로(124)를 갖는 것으로 도시되어 있지만, 이것은 단지 개략적이고 이들은 공통 인코딩/디코딩 회로의 일부를 형성할 수 있다는 것을 이해할 것이다. 그런 다음 디코딩된 이미지 데이터가 예를 들어, 디스플레이 컨트롤러(110)에 의해 디스플레이 장치(118)에 출력될 수 있거나, 또는 디스플레이를 위해, 또 다른 장치에 의해 출력될 수 있다.
따라서, 이러한 데이터 처리 시스템 내에서는 다양한 지점에서 처리중인 이미지 데이터를 압축할 수 있는 것이 바람직할 수 있다. 또한, 예를 들어, 더 높은 대역폭 미디어 애플리케이션의 경우, 더 높은 처리량(throughput)을 촉진할 수 있으려면, 주어진 대역폭(비트 전송률)을 보장할 수 있는 것이 바람직할 수 있다.
본 실시 예에서는 이미지 데이터를 고정 크기의 데이터 패킷으로 인코딩하여, 원하는 비트 전송률을 보장할 수 있는 인코딩 방식을 사용한다. 인코딩 방식은 블록 기반 방식이다. 이미지 데이터의 블록을 인코딩할 때, 이미지 데이터 중 적어도 일부는 '원시' 인코딩 방식을 사용하여 인코딩되며, 이미지 내의 서로 다른 샘플링 포인트에 대한 데이터 값(예를 들어, 루마 값)을 나타내는 최상위 비트가 데이터 패킷이 가득 찰 때까지 데이터 패킷에 '있는 그대로' 추가된다.
따라서 이 '원시' 인코딩 방식은 원하는 크기에 도달할 때까지 데이터 요소들에 대해 가능한 한 많은 최상위 비트를 추가한다. 그러나, 원하는 데이터 패킷 크기에 따라, 이것은 데이터 값이 많이 잘리는 효과를 가져올 수 있다. 예를 들어, 전형적인 예에서, 각각의 샘플링 포인트에 대한 하나 또는 두 개의 최상위 비트만이 데이터 패킷에 추가되고, 다른 덜 중요한 비트(less significant bits)는 모두 폐기된다는 것은 기정 사실일 것이다.
이로 인해 재구성된 이미지 데이터에 아티팩트(artefacts)가 생길 수 있다. 예를 들어, 데이터 값이 루마 값을 나타낼 때, 이미지 전체에 걸쳐 또는 이미지 시퀀스에서의 상이한 이미지들 사이에 상대적으로 조잡한 밝기 단계가 있을 수 있다.
본 실시 예는 블록들에 대한 원래 데이터 값들의 더 나은 재생을 제공하기 위해 블록 단위로 적용될 수 있는 적절한 라운딩 변경자 값을 선택함으로써 이를 완화하고 블록들 간의 개선된 입도(granularity)를 제공하려고 시도한다.
도 2는 본 실시 예에 따른 데이터 요소들의 블록을 인코딩하기 위한 인코딩 프로세스를 예시하는 흐름도이다.
도시된 바와 같이, 프로세스는 블록에 대한 입력 샘플들의 세트로 시작된다(단계 201). 본 발명의 인코딩은, 상기와 같이, 데이터 요소에 대한 최상위 비트의 서브세트만을 저장할 수 있다. 따라서 원래 데이터 값은 절단되고(단계 203) 데이터 패킷에서의 데이터 요소에 대해 저장되는 것은 이들 잘린 데이터 값뿐이다(단계 204). 따라서 데이터 패킷에 저장되지 않는 덜 중요한 비트는 이 스테이지에서 폐기된다.
그러나, 덜 중요한 비트가 폐기되기 전에, 데이터 요소들의 블록에 사용될 라운딩 모드를 결정하는 데 사용된다(단계 202). 따라서 라운딩 모드 비용은 다음과 같이 블록에 대해 계산될 수 있다. 먼저 데이터 요소들의 블록에 대한 대표 값이 결정된다. 예를 들어, 이것은 데이터 값들의 합계를 포함할 수 있다(적절하게 어떤 다른 대표 값이 사용될 수 있다).
데이터 요소들의 블록에 대한 대응하는 대표 값은 이용가능한 각 라운딩 모드에 대해 결정된다. 이것은 데이터 요소의 블록에 대한 첫 번째 대표 값과 동일한 방법으로 대표 값을 계산함으로써 행해지지만, 원래 데이터 값을 사용하기보다는, 라운딩 모드에 대해 각각의 반올림 비트 시퀀스를 잘린 데이터 값에 추가하여 얻은 수정된 데이터 값을 사용하여 행해진다.
원래 데이터 값에서 결정된 제1 대표 값은 이용가능한 각 라운딩 모드에 대해 취득한 대표 값과 비교되어 원래 데이터를 가장 잘 재생하는 라운딩 모드를 결정한다.
인코딩된 데이터 패킷은 블록에 사용될 라운딩 모드 및 블록 내의 데이터 요소에 대한 절단된 값을 식별하는 적절한 헤더를 포함하여 생성될 수 있다(단계 204). 인코딩된 데이터 패킷은 예를 들어 출력을 위해 제공될 수 있고(단계 205), 이후에는 디코딩된다.
도 3은 본 실시 예에 따라 생성된 인코딩된 데이터 패킷의 예를 도시한다. 특히, 도 3에 도시한 바와 같이, 데이터 패킷에는 선택한 라운딩 모드를 지정하는 헤더가 포함되어 있다. 예를 들어, 4개의 이용가능한 라운딩 모드가 있을 수 있으므로, 이는 2비트를 사용하여 지정될 수 있다. (그러나, 일반적으로 이용가능한 라운딩 모드가 더 많거나 적을 수 있다.) 인코딩된 데이터 요소에 대한 최상위 비트는 특정 순서로 팩(pack)에 저장된다.
헤더는 또한 원하는 대로 어떤 다른 적절한 정보를 포함할 수 있다. 예를 들어, 인코더가 서로 다른 인코딩 모드 중에서 선택할 수 있는 경우, 인코딩 모드는 적절한 데이터 구조를 사용하여 헤더의 시작 부분에 표시될 수 있다(예를 들어, 위에서 설명한 '원시' 인코딩 방식이 사용되는 경우, 물론 어떤 다른 적절한 시그널링이 사용될 수 있지만, 이것은 4비트를 '0000'으로 사용하여 시그널링될 수 있다).
헤더는 또한 데이터의 특성, 예를 들어 데이터가 그레이스케일 또는 컬러 (RGBA) 데이터를 나타내는지 여부를 나타낼 수 있다.
도 4는 해당 디코딩 프로세스를 나타낸다. 디코더는 도 3에 도시된 유형의 인코딩된 데이터 패킷을 수신한다(단계 401). 디코더는 사용되어야 하는 라운딩 모드를 확인하기 위해(그리고 선택적으로 또한 인코딩 방식 등을 확인하기 위해) 헤더를 판독할 수 있고 인코딩된 데이터 요소에 대한 최상위 비트를 추출할 수 있다(단계 402). 데이터 요소(샘플)는 그 다음 그들의 최상위 비트를 사용하여 재구성될 수 있으며(단계 403), 표시된 라운딩 모드 비트 패턴이 그에 따라 추가되어(단계 404) 출력 샘플을 제공한다(단계 405).
예는 지금부터는 도 5를 참조하여 설명될 것이다. 특히, 도 5는 각각 연관된 8비트 데이터 값을 갖는 4개의 샘플을 포함하는 입력 블록의 세트를 나타낸다. 특히, 도 5는 입력 블록이 20의 단계에서 0에서 100까지 점진적으로 페이딩(faded)되는 밝기 페이딩의 예를 나타낸다.
이 데이터를 인코딩하는 한 가지 접근법은 맨 위 2개의 최상위 비트(만)를 전송한 다음, 최소값 전송 비트(least valued transmitted bit)보다 아래의 비트에 대한 비트 값을 '1'로 설정하고 나머지 최하위 비트를 '0'으로 설정하여 인코딩된 값을 라운드(round)하는 것이다. 비트 시퀀스에서의 각 비트 값은 그 앞에 있는 (더 높은) 비트 값의 절반에 기여한다는 것을 알 수 있을 것이다. 따라서 이 접근 방식은 인코딩된 데이터 값을 특정 양만큼 무차별적으로 라운드하는 효과가 있다.
그래서, 도 5에 도시된 예에서, 값이 '0'(00000000)인, 제1 입력 블록에 대해, 제1 2비트(만)가 전송되고(00xxxxxx) 이 라운딩 방식은 '32'(00100000)의 출력 값을 제공한다. 각 경우에 맨 위 2개(전송된) 비트 값이 '0'이므로 각각의 입력 값이 '20', '40' 및 '60'인, 제2, 제3 및 제4 입력 블록에 대해서도 동일한 출력 값 '32'가 제공된다. 실제로, 입력 값이 '80'(01010000)인, 제5 입력 블록에 대해서는, 상기 라운딩 방식을 적용할 때 출력이 '96'으로 점프하는 경우, 출력이 변경되는 것은, 맨 위 2개의 최상위 중 하나가 변경될 때만이다.
따라서, 이 접근방식을 사용하면, 원하는 부드러운 페이딩 효과가 손실되고 블록들의 시퀀스를 따라 이동하는 데이터 값들에 단 하나의 큰 단계만 있다.
본 실시 예들은 이용가능한 출력 값들에 대해 보다 세밀한 제어를 가능하게 하므로 더 부드러운 변화(variations)를 재현할 수 있다. 예를 들어, 현재 예에서는 4개의 라운딩 모드가 이용가능하며, 각 모드는 다음과 같이 각각의 단일 라운딩 비트 시퀀스와 연관된다.
라운딩 모드 라운딩 비트 시퀀스
00 0101
01 0111
10 1001
11 1011
따라서, 이 예에서 맨 위 2개의 전송된 비트 바로 뒤에 추가되는 4개의 비트의 시퀀스를 각각 포함하는(예를 들어, 2개의 MSB가 전송되는 경우, 라운딩 비트 시퀀스가, 00xxxxxx와 같이, 다음 4개의 비트 위치에 추가될 수 있다), 4개의 이용가능한 라운딩 모드로부터 블록에 사용될 라운딩 모드의 선택은, 2비트를 사용하여 시그널링될 수 있다. 물론, 어떤 적절한 라운딩 모드 세트가 사용될 수 있고 각각의 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)의 어떤 적합한 세트와 연관될 수 있다.
유사하게, 이 경우 4개의 라운딩 모드가 사용되지만(라운딩 모드를 지정하는 너무 많은 비트를 사용하지 않고 출력 데이터에서 더 세밀한 입도(finer granularity)를 허용하는 것 사이의 좋은 균형을 제공하기 때문에), 원칙적으로 모든 라운딩 모드의 수를 원하는 대로 사용할 수 있다. 예를 들어, 가장 간단한 경우에는, 두 개의 라운딩 모드가 사용될 수 있으므로, 1비트만 사용하여 지정될 수 있다. 대안으로, 더 미세한 입도를 제공하지만, 관련 비트 및 인코딩 비용을 제공하기 위해 더 많은 수의 라운딩 모드(예를 들어, 8, 16 등)를 사용할 수 있다.
본 실시 예의 라운딩 방식을 적용할 때, 라운딩 모드 중 어느 것이 원래 데이터 값을 가장 잘 재생할 것인지 데이터 요소들의 각 블록에 대해 결정되고, 이 라운딩 모드는 디코딩된 데이터 값을 생성할 때 디코더에서 적용된다.
예를 들어, 데이터 값이 '0'인, 제1 입력 블록에 대해서는, 가장 작은 라운딩 변경자가 선택되어(즉, 모드 '00') 원래 값을 가장 가깝게 나타내므로 출력은'20'(000101000)이고, 2개의 전송된 비트(00xxxxxx)는 변경자 0.0101을 추가함으로써 변경된다.
데이터 값이 '20'인, 제2 입력 블록에 대해서는, 동일한 라운딩 변경자를 다시 사용하여 출력 값 '20'을 제공한다.
데이터 값이 '40'인, 제3 입력에 대해서는, 제4 모드('11')가, 두 개의 전송된 비트(00xxxxxx)를 변경자 0.1011을 사용하여 변경하여 '44'(00101100)의 값을 부여하므로 데이터를 가장 잘 표현한다는 것이 밝혀졌다.
마찬가지로, 데이터 값이 '60'인, 제4 입력은 '44'로 출력되고, 데이터 값이 '80'인 제5 입력은 '84'로 출력되며 시퀀스에서의 마지막 입력 블록은 '100'으로 출력된다.
따라서, 본 실시 예를 사용하여 취득된 출력은 입력 시퀀스에서의 원래 데이터 값과 더 잘 일치하고, 디코딩된 데이터 값의 더 부드러운 변화가 표현될 수 있음을 알 수 있다.
도 5의 예에서는, 설명의 편의를 위해, 각 입력 블록 내의 모든 샘플이 동일한 데이터 (밝기) 값을 갖는다. 그러나, 이는 반드시 그럴 필요는 없으며(일반적으로 그렇지 않을 것이다), 따라서 일반적으로 블록 전체의 밝기에 약간의 변화가 있을 수 있다. 그럼에도 불구하고, 주어진 블록은 전체 이미지의 일부만을 나타낸다는 것을 알 수 있을 것이며, 단일 블록에서의 인접 샘플은 유사한 (동일하지 않은 경우) 밝기 레벨을 가질 수 있음을 예상할 수 있다. 그에 상응하여, 블록들의 크기는 이것이 그 경우가 되도록, 예를 들어 블록 내의 모든 샘플이 유사한 루마 값을 갖도록 맞춤화될 수 있다. 따라서 블록 레벨에서 라운딩 변경자를 적용하는 것은 일반적으로 블록에 대한 "공통" 대표 값을 계산할 수 있기 때문에 디코딩된 출력을 개선하는 데 효과적일 수 있으며, 이는 블록 내의 데이터 값의 '평균'을 나타내는 것으로 생각할 수 있다.
따라서 일반적으로 라운딩 모드를 선택하는 알고리즘은, 아래와 같이, 원래 데이터 어레이의 밝기를 나타내는 기준 밝기와 각 라운딩 모드에 대한 해당 밝기를 계산하여 최상의 라운딩 모드를 선택한다. 그런 다음 기준에 가장 가까운 밝기의 라운딩 모드가 선택된다.
reference_brightness = sum(pow(sample[i], 2))
rm0_brightness = sum(pow(truncate(sample[i]) + rm0[i], 2))
rm1_brightness = sum(pow(truncate(sample[i]) + rm1[i], 2))
rm2_brightness = sum(pow(truncate(sample[i]) + rm2[i], 2))
rm3_brightness = sum(pow(truncate(sample[i]) + rm3[i], 2))
동일한 라운딩 비트 시퀀스가 각 샘플에 대해 추가되더라도, 라운딩 비트 시퀀스는, 예를 들어 샘플을 자를 때 얼마나 많은 최상위 비트가 저장되는지에 의존해서, 상이한 샘플에 대한 상이한 비트 위치에서 추가될 수 있음을 알 수 있을 것이다. 따라서, 위의 방정식에서는, 각 라운딩 모드에 대한 라운딩 비트 시퀀스도 샘플에 따라 인덱싱된다.
또한, 기준 밝기는 모든 샘플 포인트를 사용하여 계산될 필요가 없지만 대신 예를 들어 이들의 랜덤 서브세트만을 사용하여 결정될 수 있음을 알 수 있을 것이다. 물론 다양한 다른 구성도 가능하다.
또한 이 예에서는 기준 밝기는 각 샘플에 대한 제곱한 루마 값들(squared luma values)의 합으로부터 계산된다. 이것은 밝기가 (예를 들어) 0(검은색)에서 256(흰색)까지 선형 방식으로 증가하지 않기 때문이다(그러나 대신 거듭제곱(power) 2.2을 포함하는, 감마 곡선(gamma curve)으로 설명된다). 따라서, 제곱의 합(sum of squares)을 사용하면 밝기에 대한 더 나은 기준 값이 제공된다는 사실이 밝혀졌다.
그러나, 정밀도가 낮아도 된다면, 밝기 관계는 예를 들어 다음과 같이 대표 밝기 값을 결정함으로써 데이터 값들의 직접적인 합을 사용하여 근사화될 수 있다.
reference_brightness = sum(sample[i])
rm0_brightness = sum((truncate(sample[i]) + rm0[i]))
rm1_brightness = sum(truncate(sample[i]) + rm1[i]))
rm2_brightness = sum(truncate(sample[i]) + rm2[i]))
rm3_brightness = sum(truncate(sample[i]) + rm3[i]))
또한, 밝기 값의 관점에서 예가 위에서 주어졌지만, 본 발명은 원하는 대로 어떤 적절한 데이터 값과 결합하여 사용될 수 있음을 이해할 것이다. 이 경우, 상이한 기준 값은, 예를 들어, 데이터 값이 나타내는 것에 따라 적절할 수 있다. 예를 들어, 데이터 값으로 표시되는 속성(property)이 선형 방식으로 스케일(scale)되는 경우, 표준 선형 합계가 더 적절할 수 있다(예를 들어, 위에 제공된 제2 예에서와 같이).
따라서, 계산되고 사용되는 기준 값은 블록 내의 데이터 값의 어떤 적절하고 원하는 기능을 사용하여 계산될 수 있다. 예를 들어, 일반적으로, 원래 데이터 어레이에 대한 기준 또는 평균 값을 일반적으로 나타내는 어떤 다른 적절한 기준 값이 예를 들어 인코딩 중인 데이터 값의 특성에 따라 사용될 수 있다.
따라서, 일반적으로, 주어진 데이터 블록에 대해서는, 참조 블록 및 가능한 라운딩 모드에 대한 대표 값은 문제(in question)의 데이터 값에 대해 어떤 적합하고 원하는 기능을 수행함으로써 다음과 같이 결정될 수 있다(그런 다음 기준 값에 가장 근접한 라운딩 모드를 선택).
reference_value = function(sample[i])
rm0_value = function((truncate(sample[i]) + rm0[i]))
rm1_value = function(truncate(sample[i]) + rm1[i]))
rm2_value = function(truncate(sample[i]) + rm2[i]))
rm3_value = function(truncate(sample[i]) + rm3[i]))
전술한 상세한 설명은 예시 및 설명의 목적으로 제시되었다. 본 명세서에 기술된 발명을 개시된 정확한 형태로 제한하거나 총망라하는 것으로 의도된 것은 아니다. 위의 가르침에 비추어 많은 변경 및 변형이 가능하다. 기술된 실시 예는 본 명세서에 기술된 본 발명의 원리와 그 실제 애플리케이션을 가장 잘 설명하기 위해 선택되었으며, 이에 따라 본 기술분야의 당업자가 다양한 실시 예에서 그리고 고려된 특정 사용에 적합한 다양한 변경으로 본 명세서에 기술된 본 발명을 가장 잘 활용할 수 있다. 여기에 첨부된 청구범위에 의해 범위가 정의되는 것으로 의도된다.

Claims (17)

  1. 데이터 요소들의 어레이를 처리하는 방법으로서, 각 데이터 요소는 각각의 비트 시퀀스로 나타내는 관련 데이터 값을 가지며, 상기 방법은,
    상기 데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해서,
    데이터 요소들의 데이터 값들에 대한 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 상기 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 절단된(truncated) 데이터 값들로서 나타내는 단계와,
    복수의 이용가능한 라운딩 모드로부터 상기 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 단계를 포함하고, 여기서 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 상기 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드는,
    상기 데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 의거하여 상기 데이터 요소들의 블록에 대한 제1 대표 값을 결정하는 것과,
    복수의 이용가능한 라운딩 모드 중 적어도 하나에 대한 상기 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하며, 여기서 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 상기 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 의거하여 라운딩 모드에 대한 대표 값을 결정하는 것과,
    데이터 값들에 의거하여 결정된 상기 데이터 요소들의 블록에 대한 상기 제1 대표 값을 복수의 이용가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값과 비교하여 복수의 이용가능한 라운딩 모드 중 어느 것이 상기 제1 대표 값에 가장 가까운 대표 값을 제공하는지 결정하는 것과,
    복수의 이용가능한 라운딩 모드 중 어느 것이 상기 데이터 요소들의 블록에 대해 결정된 상기 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 의거하여 상기 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하하는 것에 의해, 선택되며,
    상기 방법은,
    상기 데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값들을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 데이터 패킷에 제공함으로써 상기 데이터 요소들의 블록을 인코딩하는 단계를 더 포함하고,
    데이터 패킷으로 인코딩된 상기 데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 데이터 값(들)을 사용하고자 하는 경우, 상기 방법은 후속으로,
    데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터와 함께 디코딩을 위해 데이터 패킷을 디코더 회로에 전달하는 단계와,
    하나 이상의 데이터 요소(들)에 대한 절단된 데이터 값(들)을 추출하는 단계와,
    표시된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 절단된 데이터 값(들)에 추가하여 상기 데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하는 단계를 포함하는, 처리 방법.
  2. 제 1 항에 있어서,
    상기 데이터 요소들의 블록은 고정 크기 데이터 패킷으로서 인코딩되는, 처리 방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 선택된 라운딩 모드는 상기 데이터 패킷에 대한 헤더에 포함되는, 처리 방법.
  4. 제 1 항 또는 제 2 항에 있어서,
    복수의 상이한 인코딩 모드가 이용가능하고, 인코딩 모드 중 하나는 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 절단된 데이터 값들로서 상기 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 나타내는 것과, 데이터 요소들에 대한 절단된 데이터 값들을 데이터 패킷에 추가함으로써 상기 데이터 요소들의 블록을 인코딩하는 것을 포함하고,
    상기 방법은 상기 데이터 요소들의 어레이를 인코딩하기 위해 복수의 이용가능한 인코딩 모드 중 어느 하나가 사용되어야 하는지를 결정하기 위해 상기 데이터 요소들의 어레이를 분석하는 단계와,
    데이터 패킷에 대한 헤더에서 상기 결정된 인코딩 모드를 시그널링하는 단계를 포함하는, 처리 방법.
  5. 제 1 항 또는 제 2 항에 있어서,
    상기 데이터 요소들의 어레이는 이미지 데이터의 어레이를 나타내는, 처리 방법.
  6. 제 1 항 또는 제 2 항에 있어서,
    상기 제1 대표 값을 결정하는 것은, 상기 블록 내의 데이터 요소들 중 적어도 일부에 대해 데이터 값들의 제곱의 합(sum of the squares)을 수행하는 것을 포함하고,
    각각의 라운딩 모드에 대한 상기 대표 값을 결정하는 것은, 상기 블록 내의 데이터 요소들 중 적어도 일부에 대해 변경된 데이터 값들의 제곱의 합을 수행하는 것을 포함하며, 여기서 데이터 요소에 대한 변경된 데이터 값은 라운딩 모드에 대한 각각의 라운딩 비트 시퀀스를, 데이터 요소에 대한 절단된 데이터 값에 추가함으로써 취득되는, 처리 방법.
  7. 데이터 요소들의 어레이를 인코딩하는 방법으로서, 각 데이터 요소는 각각의 비트 시퀀스로 나타내는 관련 데이터 값을 가지며, 상기 방법은,
    데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해서,
    데이터 요소들의 데이터 값들에 대한 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 절단된 데이터 값들로서 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 나타내는 단계와,
    복수의 이용가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 단계를 포함하고, 여기서 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드는,
    데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 의거하여 데이터 요소들의 블록에 대한 제1 대표 값을 결정하는 것과,
    복수의 이용가능한 라운딩 모드 중 적어도 하나에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하고, 여기서 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 의거하여 라운딩 모드에 대한 대표 값을 결정하는 것과,
    데이터 값들에 의거한 데이터 요소들의 블록에 대한 상기 제1 대표 값을, 복수의 이용가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값과 비교해서 복수의 이용가능한 라운딩 모드 중 어느 것이 상기 제1 대표 값에 가장 가까운 대표 값을 제공하는지 결정하는 것과,
    복수의 이용가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 상기 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 의거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하는 것에 의해, 선택되며,
    상기 방법은,
    데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값들을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 데이터 패킷에 제공함으로써 데이터 요소들의 블록을 인코딩하는 단계를 더 포함하는, 인코딩 방법.
  8. 하나 이상의 데이터 패킷(들)을 포함하는 데이터 스트림을 디코딩하는 방법으로서, 각 데이터 패킷은 데이터 요소들의 어레이 내의 데이터 요소들의 블록을 인코딩하며, 상기 블록 내의 각 데이터 요소는 관련 인코딩된 데이터 값을 가지며, 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터는 데이터 패킷에 제공되고, 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 상기 방법은,
    데이터 패킷으로 인코딩된 데이터 요소들의 블록 내의 하나 이상의 데이터 요소에 대한 데이터 값(들)을 사용하고자 하는 경우,
    데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 인코딩된 데이터 값(들)을 추출하기 위해 데이터 패킷을 판독하는 단계와,
    데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 식별하는 단계와,
    식별된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 인코딩된 데이터 값(들)에 추가하여 데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하는 단계를 포함하는, 디코딩 방법.
  9. 데이터 요소들의 어레이를 처리하는 데이터 처리 시스템으로서, 각 데이터 요소는 각각의 비트 시퀀스로 나타내는 관련 데이터 값을 가지며, 상기 데이터 처리 시스템은,
    상기 데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해,
    데이터 요소들의 데이터 값들에 대해 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 절단된 데이터 값들로서 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 나타내고,
    복수의 이용가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록 구성되는 인코더 회로를 구비하고, 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관려되며, 여기서 라운딩 모드의 선택은,
    데이터 요소들의 블록 내의 데이터 요소들에 대한 데이터 값들에 의거하여 데이터 요소들의 블록에 대한 제1 대표 값을 결정하고,
    복수의 이용가능한 라운딩 모드 중 적어도 하나에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하고, 여기서 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 의거하여 라운딩 모드에 대한 대표 값을 결정하며,
    데이터 값들에 의거하여 결정된 데이터 요소들의 블록에 대한 상기 제1 대표 값을, 복수의 이용가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값들과 비교하여 복수의 이용가능한 라운딩 모드 중 어느 것이 상기 제1 대표 값에 가장 가까운 대표 값을 제공하는지를 결정하고,
    복수의 이용가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 상기 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 의거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록
    구성되는 라운딩 모드 선택 회로에 의해 수행되고,
    상기 인코더 회로는,
    데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값들을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 데이터 패킷에 제공함으로써 데이터 요소들의 블록을 인코딩하도록 더 구성되고,
    상기 데이터 처리 시스템은,
    데이터 패킷으로 인코딩된 데이터 요소들의 블록 내의 하나 이상의 데이터 요소들에 대한 데이터 값들을 사용하고자 하는 경우,
    데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 절단된 데이터 값(들)을 추출하고,
    표시된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 절단된 데이터 값(들)에 추가하여 데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하도록
    구성되는 디코더 회로를 더 구비하는, 데이터 처리 시스템.
  10. 제 9 항에 있어서,
    상기 인코더 회로는 고정 크기 데이터 패킷으로서 데이터 요소들의 블록을 인코딩하도록 구성되는, 데이터 처리 시스템.
  11. 제 9 항 또는 제 10 항에 있어서,
    상기 인코더 회로는 데이터 패킷에 대한 헤더에 선택된 라운딩 모드를 포함하도록 구성되는, 데이터 처리 시스템.
  12. 제 9 항 또는 제 10 항에 있어서,
    복수의 상이한 인코딩 모드가 이용가능하고, 인코딩 모드 중 하나는 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용해서 절단된 데이터 값들로서 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 나타내는 것과, 데이터 요소들에 대한 절단된 데이터 값들을 데이터 패킷에 추가해서 데이터 요소들의 블록을 인코딩하는 것을 포함하고,
    상기 인코더 회로는 데이터 요소들의 어레이를 인코딩하기 위해 복수의 이용 가능한 인코딩 모드 중 어느 하나가 사용되어야 하는지를 결정하기 위해 데이터 요소들의 어레이를 분석하고,
    데이터 패킷에 대한 헤더에서 결정된 인코딩 모드를 시그널링하도록 구성되는, 데이터 처리 시스템.
  13. 제 9 항 또는 제 10 항에 있어서,
    상기 데이터 요소들의 어레이는 이미지 데이터의 어레이를 나타내는, 데이터 처리 시스템.
  14. 제 9 항 또는 제 10 항에 있어서,
    상기 제1 대표 값을 결정하는 것은, 블록 내의 데이터 요소들 중 적어도 일부에 대한 데이터 값들의 제곱의 합을 수행하는 것을 포함하고,
    각각의 라운딩 모드에 대한 대표 값을 결정하는 것은 블록 내의 데이터 요소들 중 적어도 일부에 대해 변경된 데이터 값들의 제곱의 합을 수행하는 것을 포함하며, 여기서 데이터 요소에 대한 변경된 데이터 값은 라운딩 모드에 대한 각각의 라운딩 비트 시퀀스를 데이터 요소에 대한 절단된 데이터 값에 추가함으로써 취득되는, 데이터 처리 시스템.
  15. 데이터 요소들의 어레이를 인코딩하는 인코더로서, 각 데이터 요소는 각각의 비트 시퀀스로 나타내는 관련 데이터 값을 가지며, 상기 인코더는,
    데이터 요소들의 어레이에서의 데이터 요소들의 블록에 대해,
    데이터 요소들의 데이터 값들에 대한 각각의 비트 시퀀스의 하나 이상의 최상위 비트의 서브세트를 사용하여 절단된 데이터 값들로서 데이터 요소들의 블록 내의 데이터 요소들의 각각에 대한 데이터 값들을 나타내고,
    복수의 이용가능한 라운딩 모드로부터 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록 구성되는 인코딩 회로를 구비하고, 각 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 여기서 라운딩 모드의 선택은,
    데이터 요소들 블록 내의 데이터 요소들에 대한 데이터 값들에 의거하여 데이터 요소들 블록에 대한 제1 대표 값을 결정하고,
    복수의 이용가능한 라운딩 모드의 각각에 대한 데이터 요소들의 블록에 대한 대응하는 대표 값을 결정하며, 여기서 라운딩 모드와 관련된 각각의 라운딩 비트 시퀀스(들) 및 데이터 요소들의 블록 내의 데이터 요소들에 대한 절단된 데이터 값들에 의거하여 라운딩 모드에 대한 대표 값을 결정하고,
    데이터 요소들의 블록에 대해 결정된 상기 제1 대표 값을 복수의 이용가능한 라운딩 모드 중 적어도 하나에 대해 결정된 대응하는 대표 값과 비교하여 복수의 이용가능한 라운딩 모드 중 어느 것이 상기 제1 대표 값에 가장 가까운 대표 값을 제공하는지 결정하고,
    복수의 이용가능한 라운딩 모드 중 어느 것이 데이터 요소들의 블록에 대해 결정된 상기 제1 대표 값에 가장 가까운 대표 값을 제공하도록 결정되는지에 의거하여 데이터 요소들의 블록을 디코딩할 때 적용될 라운딩 모드를 선택하도록
    구성되는 라운딩 모드 선택 회로에 의해 수행되고,
    상기 인코딩 회로는,
    데이터 요소들의 블록을 나타내는 데이터 패킷으로서 데이터 요소들에 대한 절단된 데이터 값들을 저장하고 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터를 패킷 데이터에 제공함으로써 데이터 요소들의 블록을 인코딩하도록 더 구성되는, 인코더.
  16. 하나 이상의 데이터 패킷(들)을 포함하는 데이터 스트림을 디코딩하는 디코더로서, 각 데이터 패킷은 데이터 요소들의 어레이 내의 데이터 요소들의 블록을 인코딩하며, 블록 내의 각 데이터 요소는 관련 인코딩된 데이터 값을 가지며, 데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 나타내는 데이터는 데이터 패킷에 제공되고, 라운딩 모드는 하나 이상의 라운딩 비트 시퀀스(들)와 관련되며, 상기 디코더는,
    데이터 패킷으로 인코딩된 데이터 요소들의 블록 내의 하나 이상의 데이터 요소들에 대한 데이터 값(들)을 사용하고자 하는 경우,
    데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 인코딩된 데이터 값(들)을 추출하기 위해 데이터 패킷을 판독하고,
    데이터 패킷을 디코딩할 때 사용될 라운딩 모드를 식별하며,
    식별된 라운딩 모드와 관련된 라운딩 비트 시퀀스(들)를 인코딩된 데이터 값(들)에 추가하여 데이터 요소들의 블록 내의 하나 이상의 데이터 요소(들)에 대한 디코딩된 데이터 값(들)을 취득하도록
    구성된 디코딩 회로를 구비하는, 디코더.
  17. 데이터 프로세서에서 실행될 때 청구항 1에 따른 방법을 수행하는 소프트웨어 코드를 저장하는 컴퓨터 판독가능한 저장 매체.
KR1020200137205A 2019-10-24 2020-10-22 데이터 어레이 인코딩 KR20210049002A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1915449.1 2019-10-24
GB1915449.1A GB2589066B (en) 2019-10-24 2019-10-24 Encoding data arrays

Publications (1)

Publication Number Publication Date
KR20210049002A true KR20210049002A (ko) 2021-05-04

Family

ID=68653488

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200137205A KR20210049002A (ko) 2019-10-24 2020-10-22 데이터 어레이 인코딩

Country Status (4)

Country Link
US (1) US11515961B2 (ko)
KR (1) KR20210049002A (ko)
CN (1) CN112712458A (ko)
GB (1) GB2589066B (ko)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070110151A1 (en) * 2005-11-14 2007-05-17 Ess Technology, Inc. System and method for video frame buffer compression
UA109312C2 (uk) * 2011-03-04 2015-08-10 Імпульсно-кодова модуляція з квантуванням при кодуванні відеоінформації
GB2513111A (en) * 2013-04-08 2014-10-22 Sony Corp Data encoding and decoding
GB2516422A (en) * 2013-07-09 2015-01-28 Sony Corp Data encoding and decoding
US10506232B2 (en) * 2015-09-23 2019-12-10 Arris Enterprises Llc System for reshaping and coding high dynamic range and wide color gamut sequences
AU2017204643B2 (en) * 2017-07-07 2020-05-14 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding video data
GB2579568B (en) 2018-12-03 2022-04-27 Advanced Risc Mach Ltd Encoding data arrays

Also Published As

Publication number Publication date
US20210126736A1 (en) 2021-04-29
GB201915449D0 (en) 2019-12-11
GB2589066A (en) 2021-05-26
GB2589066B (en) 2023-06-28
CN112712458A (zh) 2021-04-27
US11515961B2 (en) 2022-11-29

Similar Documents

Publication Publication Date Title
US10147202B2 (en) Methods of and apparatus for encoding and decoding data
CN114631320A (zh) 对图像执行人工智能(ai)编码和ai解码的设备和方法
US10395394B2 (en) Encoding and decoding arrays of data elements
US7787691B2 (en) High quality image processing
CN105657425B (zh) 编码方法、系统和编码器、解码方法、系统和解码器
US7567716B2 (en) Method and device for randomly accessing a region of an encoded image for the purpose of decoding it and a method and device for encoding an image
CN103596009B (zh) 解码器及解码方法
CN106254877B (zh) 视频处理系统、处理视频数据帧的方法、装置与存储介质
CN113170140A (zh) 数据阵列的位平面编码
US20210250575A1 (en) Image processing device
US11263786B2 (en) Decoding data arrays
US11600026B2 (en) Data processing systems
US10791332B2 (en) Video data processing system
US11423580B2 (en) Decoding data arrays
US11515961B2 (en) Encoding data arrays
US11189005B1 (en) Index buffers in graphics processing systems
Mavridis et al. Texture compression using wavelet decomposition
GB2616740A (en) Decoding data arrays
US20230262210A1 (en) Visual lossless image/video fixed-rate compression
KR20210117205A (ko) 데이터 어레이들의 인코딩
CN115706800A (zh) 图像切片变换方法和电子装置
Bregler et al. Texture Compression using Wavelet Decomposition