Patent Description:
<CIT> discloses forming an initial reconstructed image block from inverse quantization and inverse transform, and further refines the reconstructed image block using pixels from neighboring reconstructed blocks. The image block may be refined using a bilateral filter, whose space parameter and range parameter are adaptive to the quantization parameter. The particular implementation can be used in both encoding and decoding when reconstructing an image block. When used in encoding, the particular implementation can be used jointly with coefficient truncation, where some non-zero transform coefficients are set to zero. The number of remaining non-zero transform coefficients after coefficient truncation may be adaptive to the quantization parameter, the variance of the image block, the number of non-zero transform coefficients of the image block, and the index of the last non-zero transform coefficient in a zigzag scanning order.

<CIT> discloses that a foreground image is coded with a transparency mask together with the compositing information such as the size or location of the foreground image in the composite image. Such compositing information may be organised in a Supplementary Enhanced Information message as specified by the H. <NUM>/AVC and the HEVC standards. The foreground image is decoded and used with the compositing information to form a composite image.

<NPL>] presents a bilateral filter operation, suggested to be performed on decoded sample values directly after the inverse transform. The proposed bilateral filter is a five-tap filter in the shape of a plus sign. The strength of the filter is based only on the TU size and QP. No additional parameters are determined during encoding and no new syntax elements are proposed except for flag at slice-, PPS- or SPS-level for turning on or off the filter.

<CIT> discloses an apparatus and a method for encoding and decoding an image containing a gray alpha channel image are provided. The apparatus for encoding an image comprises: a block data reception unit, which receives image data of a block currently being input to the apparatus and classifies the current block either as a foreground image portion or as a background image portion according to the values of gray alpha components contained in the current block; a foreground image encoding unit, which sequentially encodes the gray alpha components and brightness and hue components of the current block if the current block is classified as the foreground image portion; and a background image encoding unit, which encodes the gray alpha components of the current block if the current block is classified as the background image portion. The apparatus for decoding an image comprises: a bitstream interpretation unit, which interprets the bitstream in units of predetermined blocks and classifies a current block obtained as one of the interpretation results either as a foreground image portion or as a background image portion; a foreground image decoding unit, which generates a restored gray alpha channel image and a restored brightness and hue image by sequentially decoding gray alpha components and brightness and hue components of the current block if the current block is classified as the foreground image portion; and a background image decoding unit, which generates a restored gray alpha channel image by decoding the gray alpha components of the current block if the current block is classified as the background image portion.

Compression and decompression techniques can introduce artifacts and other reconstruction errors to an image. Post processing designed specifically for the alpha channel can improve image quality by reducing the visibility of these errors.

A first aspect of the teachings herein is a method of decoding using alpha channel post processing. The method includes decoding, from multiple color channels of a bitstream, color channel values for an encoded image and decoding, from an alpha channel of the bitstream, alpha channel values for the encoded image. The method also includes determining a bilateral filter based on a level of compression for encoding the alpha channel, post processing the alpha channel values by filtering the alpha channel values using the bilateral filter to obtain filtered alpha channel values, filtering, using a color channel filter that is other than a bilateral filter, at least some of the color channel values to obtain filtered color channel values, and generating at least a portion of a reconstructed image corresponding to the encoded image using the filtered alpha channel values and the filtered color channel values.

Another aspect of the teachings herein is an apparatus to perform methods of coding using alpha channel post processing described herein. The apparatus can be an image or frame decoder. The apparatus can include a processor and a memory storing instruction that, upon execution, cause the processor to perform methods of coding using alpha channel post processing described herein.

These and other aspects of the present disclosure are disclosed in the following detailed description of the embodiments, the appended claims, and the accompanying figures.

Image and video compression schemes may include breaking an image, or frame, into smaller portions, such as blocks, and generating an output bitstream using techniques to minimize the bandwidth utilization of the information included for each block in the output. The techniques can include limiting the information by reducing spatial redundancy, reducing temporal redundancy, or a combination thereof. For example, temporal or spatial redundancies may be used to predict a block, or a portion thereof, such that the difference, or residual, between the predicted and original blocks is represented in the bitstream. The residual may be further compressed by transforming its information into transform coefficients, quantizing the transform coefficients, and entropy coding the quantized transform coefficients. Other coding information, such as that needed to reconstruct the block from the encoded block information, may also be included in the bitstream.

The image may comprise three color channels, such as one luma and two chroma channels, and optionally an alpha channel describing transparency information. When decoding a color channel, a deblocking filter may be applied to reconstructed data to mitigate block edge artifacts. However, the alpha channel has different characteristics than color channels, making a deblocking filter less useful for post processing.

Implementations of the teachings herein describe alpha channel post processing, and more particularly a post processing filter that is specific to the alpha channel. Details are described herein with initial reference to a system in which the teachings herein can be implemented.

<FIG> is a diagram of a computing device <NUM> in accordance with implementations of this disclosure. The computing device <NUM> shown includes a memory <NUM>, a processor <NUM>, a user interface (UI) <NUM>, an electronic communication unit <NUM>, a sensor <NUM>, a power source <NUM>, and a bus <NUM>. As used herein, the term "computing device" includes any unit, or combination of units, capable of performing any method, or any portion or portions thereof, disclosed herein.

The computing device <NUM> may be a stationary computing device, such as a personal computer (PC), a server, a workstation, a minicomputer, or a mainframe computer; or a mobile computing device, such as a mobile telephone, a personal digital assistant (PDA), a laptop, or a tablet PC. Although shown as a single unit, any one element or elements of the computing device <NUM> can be integrated in any number of separate physical units. For example, the user interface <NUM> and processor <NUM> can be integrated in a first physical unit, and the memory <NUM> can be integrated in a second physical unit.

The memory <NUM> can include any non-transitory computer-usable or computer-readable medium, such as any tangible device that can, for example, contain, store, communicate, or transport data <NUM>, instructions <NUM>, an operating system <NUM>, or any information associated therewith, for use by or in connection with other components of the computing device <NUM>. The non-transitory computer-usable or computer-readable medium can be, for example, a solid state drive, a memory card, removable media, a read-only memory (ROM), a random-access memory (RAM), any type of disk including a hard disk, a floppy disk, an optical disk, a magnetic or optical card, an application-specific integrated circuit (ASIC), or any type of non-transitory media suitable for storing electronic information, or any combination thereof.

Although shown as a single unit, the memory <NUM> may include multiple physical units, such as one or more primary memory units, such as random-access memory units, one or more secondary data storage units, such as disks, or a combination thereof. For example, the data <NUM>, or a portion thereof, the instructions <NUM>, or a portion thereof, or both, may be stored in a secondary storage unit and may be loaded or otherwise transferred to a primary storage unit in conjunction with processing the respective data <NUM>, executing the respective instructions <NUM>, or both. In some implementations, the memory <NUM>, or a portion thereof, may be removable memory.

The data <NUM> can include information, such as input audio and/or visual data, encoded audio and/or visual data, decoded audio and/or visual data, or the like. The visual data can include still images, frames of video sequences, and/or video sequences. The instructions <NUM> can include directions, such as code, for performing any method, or any portion or portions thereof, disclosed herein. The instructions <NUM> can be realized in hardware, software, or any combination thereof. For example, the instructions <NUM> may be implemented as information stored in the memory <NUM>, such as a computer program, that may be executed by the processor <NUM> to perform any of the respective methods, algorithms, aspects, or combinations thereof, as described herein.

Although shown as included in the memory <NUM>, in some implementations, the instructions <NUM>, or a portion thereof, may be implemented as a special-purpose processor, or circuitry, that can include specialized hardware for carrying out any of the methods, algorithms, aspects, or combinations thereof, as described herein. Portions of the instructions <NUM> can be distributed across multiple processors on the same machine or different machines or across a network, such as a local area network, a wide area network, the Internet, or a combination thereof.

The processor <NUM> can include any device or system, now-existing or hereafter developed, capable of manipulating or processing a digital signal or other electronic information, including optical processors, quantum processors, molecular processors, or a combination thereof. For example, the processor <NUM> can include a special-purpose processor, a central processing unit (CPU), a digital signal processor (DSP), a plurality of microprocessors, one or more microprocessors in association with a DSP core, a controller, a microcontroller, an ASIC, a Field Programmable Gate Array (FPGA), a programmable logic array, a programmable logic controller, microcode, firmware, any type of integrated circuit (IC), a state machine, or any combination thereof. As used herein, the term "processor" includes a single processor or multiple processors.

The user interface <NUM> can include any unit capable of interfacing with a user, such as a virtual or physical keypad, a touchpad, a display, a touch display, a speaker, a microphone, a video camera, a sensor, or any combination thereof. For example, the user interface <NUM> may be an audio-visual display device, and the computing device <NUM> may present audio, such as decoded audio, using the user interface <NUM> audio-visual display device, such as in conjunction with displaying video, such as decoded video. Although shown as a single unit, the user interface <NUM> may include one or more physical units. For example, the user interface <NUM> may include an audio interface for performing audio communication with a user, and a touch display for performing visual and touch-based communication with the user.

The electronic communication unit <NUM> can transmit, receive, or transmit and receive signals via a wired or wireless electronic communication medium <NUM>, such as a radio frequency (RF) communication medium, an ultraviolet (UV) communication medium, a visible light communication medium, a fiber-optic communication medium, a wireline communication medium, or a combination thereof. For example, as shown, the electronic communication unit <NUM> is operatively connected to an electronic communication interface <NUM>, such as an antenna, configured to communicate via wireless signals.

Although the electronic communication interface <NUM> is shown as a wireless antenna in <FIG>, the electronic communication interface <NUM> can be a wireless antenna, as shown, a wired communication port, such as an Ethernet port, an infrared port, a serial port, or any other wired or wireless unit capable of interfacing with a wired or wireless electronic communication medium <NUM>. Although <FIG> shows a single electronic communication unit <NUM> and a single electronic communication interface <NUM>, any number of electronic communication units and any number of electronic communication interfaces can be used.

The sensor <NUM> may include, for example, an audio-sensing device, a visible light-sensing device, a motion-sensing device, or a combination thereof. For example, the sensor <NUM> may include a sound-sensing device, such as a microphone, or any other sound-sensing device, now existing or hereafter developed, that can sense sounds in the proximity of the computing device <NUM>, such as speech or other utterances, made by a user operating the computing device <NUM>. In another example, the sensor <NUM> may include a camera, or any other image-sensing device, now existing or hereafter developed, that can sense an image, such as the image of a user operating the computing device. Although a single sensor <NUM> is shown, the computing device <NUM> may include a number of sensors <NUM>. For example, the computing device <NUM> may include a first camera oriented with a field of view directed toward a user of the computing device <NUM> and a second camera oriented with a field of view directed away from the user of the computing device <NUM>.

The power source <NUM> can be any suitable device for powering the computing device <NUM>. For example, the power source <NUM> can include a wired external power source interface; one or more dry cell batteries, such as nickel-cadmium (NiCd), nickel-zinc (NiZn), nickel metal hydride (NiMH), lithium-ion (Li-ion); solar cells; fuel cells; or any other device capable of powering the computing device <NUM>. Although a single power source <NUM> is shown in <FIG>, the computing device <NUM> may include multiple power sources <NUM>, such as a battery and a wired external power source interface.

Although shown as separate units, the electronic communication unit <NUM>, the electronic communication interface <NUM>, the user interface <NUM>, the power source <NUM>, or portions thereof, may be configured as a combined unit. For example, the electronic communication unit <NUM>, the electronic communication interface <NUM>, the user interface <NUM>, and the power source <NUM> may be implemented as a communications port capable of interfacing with an external display device, providing communications, power, or both.

One or more of the memory <NUM>, the processor <NUM>, the user interface <NUM>, the electronic communication unit <NUM>, the sensor <NUM>, or the power source <NUM> may be operatively coupled via a bus <NUM>. Although a single bus <NUM> is shown in <FIG>, a computing device <NUM> may include multiple buses. For example, the memory <NUM>, the processor <NUM>, the user interface <NUM>, the electronic communication unit <NUM>, the sensor <NUM>, and the bus <NUM> may receive power from the power source <NUM> via the bus <NUM>. In another example, the memory <NUM>, the processor <NUM>, the user interface <NUM>, the electronic communication unit <NUM>, the sensor <NUM>, the power source <NUM>, or a combination thereof, may communicate data, such as by sending and receiving electronic signals, via the bus <NUM>.

Although not shown separately in <FIG>, one or more of the processor <NUM>, the user interface <NUM>, the electronic communication unit <NUM>, the sensor <NUM>, or the power source <NUM> may include internal memory, such as an internal buffer or register. For example, the processor <NUM> may include internal memory (not shown) and may read data <NUM> from the memory <NUM> into the internal memory (not shown) for processing.

Although shown as separate elements, the memory <NUM>, the processor <NUM>, the user interface <NUM>, the electronic communication unit <NUM>, the sensor <NUM>, the power source <NUM>, and the bus <NUM>, or any combination thereof, can be integrated in one or more electronic units, circuits, or chips.

<FIG> is a diagram of a computing and communications system <NUM> in accordance with implementations of this disclosure. The computing and communications system <NUM> shown includes computing and communication devices 100A, 100B, 100C, access points 210A, 210B, and a network <NUM>. For example, the computing and communications system <NUM> can be a multiple access system that provides communication, such as voice, audio, data, video, messaging, broadcast, or a combination thereof, to one or more wired or wireless communicating devices, such as the computing and communication devices 100A, 100B, 100C. Although, for simplicity, <FIG> shows three computing and communication devices 100A, 100B, 100C, two access points 210A, 210B, and one network <NUM>, any number of computing and communication devices, access points, and networks can be used.

A computing and communication device 100A, 100B, or 100C can be, for example, a computing device, such as the computing device <NUM> shown in <FIG>. For example, the computing and communication devices 100A, 100B may be user devices, such as a mobile computing device, a laptop, a thin client, or a smartphone, and the computing and communication device 100C may be a server, such as a mainframe or a cluster. Although the computing and communication device 100A and the computing and communication device 100B are described as user devices, and the computing and communication device 100C is described as a server, any computing and communication device may perform some or all of the functions of a server, some or all of the functions of a user device, or some or all of the functions of a server and a user device. For example, the server computing and communication device 100C may receive, encode, process, store, transmit, or a combination thereof, audio data; and one or both of the computing and communication device 100A and the computing and communication device 100B may receive, decode, process, store, present, or a combination thereof, the audio data.

Each computing and communication device 100A, 100B, 100C, which may include a user equipment (UE), a mobile station, a fixed or mobile subscriber unit, a cellular telephone, a personal computer, a tablet computer, a server, consumer electronics, or any similar device, can be configured to perform wired or wireless communication, such as via the network <NUM>. For example, the computing and communication devices 100A, 100B, 100C can be configured to transmit or receive wired or wireless communication signals. Although each computing and communication device 100A, 100B, 100C is shown as a single unit, a computing and communication device can include any number of interconnected elements.

Each access point 210A, 210B can be any type of device configured to communicate with a computing and communication devices 100A, 100B, 100C, a network <NUM>, or both via wired or wireless communication links 180A, 180B, 180C. For example, an access point 210A, 210B can include a base station, a base transceiver station (BTS), a Node-B, an enhanced Node-B (eNode-B), a Home Node-B (HNode-B), a wireless router, a wired router, a hub, a relay, a switch, or any similar wired or wireless device. Although each access point 210A, 210B is shown as a single unit, an access point can include any number of interconnected elements.

The network <NUM> can be any type of network configured to provide services, such as voice, data, applications, voice over internet protocol (VoIP), or any other communications protocol or combination of communications protocols, over a wired or wireless communication link. For example, the network <NUM> can be a local area network (LAN), wide area network (WAN), virtual private network (VPN), a mobile or cellular telephone network, the Internet, or any other means of electronic communication. The network can use a communication protocol, such as the Transmission Control Protocol (TCP), the User Datagram Protocol (UDP), the Internet Protocol (IP), the Real-time Transport Protocol (RTP), the HyperText Transport Protocol (HTTP), or a combination thereof.

The computing and communication devices 100A, 100B, 100C can communicate with each other via the network <NUM> using one or more wired or wireless communication links, or via a combination of wired and wireless communication links. For example, as shown, the computing and communication devices 100A, 100B can communicate via wireless communication links 180A, 180B, and computing and communication device 100C can communicate via a wired communication link 180C. Any of the computing and communication devices 100A, 100B, 100C may communicate using any wired or wireless communication link or links. For example, a first computing and communication device 100A can communicate via a first access point 210A using a first type of communication link, a second computing and communication device 100B can communicate via a second access point 210B using a second type of communication link, and a third computing and communication device 100C can communicate via a third access point (not shown) using a third type of communication link. Similarly, the access points 210A, 210B can communicate with the network <NUM> via one or more types of wired or wireless communication links 230A, 230B. Although <FIG> shows the computing and communication devices 100A, 100B, 100C in communication via the network <NUM>, the computing and communication devices 100A, 100B, 100C can communicate with each other via any number of communication links, such as a direct wired or wireless communication link.

In some implementations, communications between one or more of the computing and communication devices 100A, 100B, 100C may omit communicating via the network <NUM> and may include transferring data via another medium (not shown), such as a data storage device. For example, the server computing and communication device 100C may store audio data, such as encoded audio data, in a data storage device, such as a portable data storage unit, and one or both of the computing and communication device 100A or the computing and communication device 100B may access, read, or retrieve the stored audio data from the data storage unit, such as by physically disconnecting the data storage device from the server computing and communication device 100C and physically connecting the data storage device to the computing and communication device 100A or the computing and communication device 100B.

Other implementations of the computing and communications system <NUM> are possible. For example, in an implementation, the network <NUM> can be an ad-hoc network and can omit one or more of the access points 210A, 210B. The computing and communications system <NUM> may include devices, units, or elements not shown in <FIG>. For example, the computing and communications system <NUM> may include many more communicating devices, networks, and access points.

<FIG> is a diagram of a video stream <NUM> for use in encoding and decoding in accordance with implementations of this disclosure. A video stream <NUM>, such as a video stream captured by a video camera or a video stream generated by a computing device, may include a video sequence <NUM>. The video sequence <NUM> may include a sequence of adjacent frames <NUM>. Although three adjacent frames <NUM> are shown, the video sequence <NUM> can include any number of adjacent frames <NUM>.

Each frame <NUM> from the adjacent frames <NUM> may represent a single image from the video stream. Although not shown in <FIG>, a frame <NUM> may include one or more segments, tiles, or planes, which may be coded, or otherwise processed, independently, such as in parallel. A frame <NUM> may include blocks <NUM>. Although not shown in <FIG>, a block can include pixels. For example, a block can include a <NUM>×<NUM> group of pixels, an <NUM>×<NUM> group of pixels, an <NUM>×<NUM> group of pixels, or any other group of pixels. Unless otherwise indicated herein, the term "block" can include a superblock, a macroblock, a segment, a slice, or any other portion of a frame. A frame, a block, a pixel, or a combination thereof, can include display information, such as luminance information, chrominance information, or any other information that can be used to store, modify, communicate, or display the video stream or a portion thereof.

<FIG> is a block diagram of an encoder <NUM> in accordance with implementations of this disclosure. Encoder <NUM> can be implemented in a device, such as the computing device <NUM> shown in <FIG> or the computing and communication devices 100A, 100B, 100C shown in <FIG>, as, for example, a computer software program stored in a data storage unit, such as the memory <NUM> shown in <FIG>. The computer software program can include machine-readable instructions that may be executed by a processor, such as the processor <NUM> shown in <FIG>, and may cause the device to encode video data as described herein. The encoder <NUM> can be implemented as specialized hardware included, for example, in the computing device <NUM>.

The encoder <NUM> has the following stages to perform the various functions in a forward path (shown by the solid connection lines) to produce an encoded or compressed bitstream <NUM> using the video stream <NUM> as input: an intralinter prediction stage <NUM>, a transform stage <NUM>, a quantization stage <NUM>, and an entropy encoding stage <NUM>. The encoder <NUM> may also include a reconstruction path (shown by the dotted connection lines) to reconstruct a frame for encoding of future blocks. In <FIG>, the encoder <NUM> has the following stages to perform the various functions in the reconstruction path: a dequantization stage <NUM>, an inverse transform stage <NUM>, a reconstruction stage <NUM>, and a loop filtering stage <NUM>. Other structural variations of the encoder <NUM> can be used to encode the video stream <NUM>.

In some cases, the functions performed by the encoder <NUM> may occur after a filtering of the video stream <NUM>. That is, the video stream <NUM> may undergo pre-processing according to one or more implementations of this disclosure prior to the encoder <NUM> receiving the video stream <NUM>. Alternatively, the encoder <NUM> may itself perform such pre-processing against the video stream <NUM> prior to proceeding to perform the functions described with respect to <FIG>, such as prior to the processing of the video stream <NUM> at the intralinter prediction stage <NUM>.

When the video stream <NUM> is presented for encoding after the pre-processing is performed, respective adjacent frames <NUM>, such as the frame <NUM>, can be processed in units of blocks. At the intralinter prediction stage <NUM>, respective blocks can be encoded using intra-frame prediction (also called intra-prediction) or inter-frame prediction (also called inter-prediction). In any case, a prediction block can be formed. In the case of intra-prediction, a prediction block may be formed from samples in the current frame that have been previously encoded and reconstructed. In the case of inter-prediction, a prediction block may be formed from samples in one or more previously constructed reference frames.

Next, the prediction block can be subtracted from the current block at the intralinter prediction stage <NUM> to produce a residual block (also called a residual). The transform stage <NUM> transforms the residual into transform coefficients in, for example, the frequency domain using block-based transforms. The quantization stage <NUM> converts the transform coefficients into discrete quantum values, which are referred to as quantized transform coefficients, using a quantizer value or a quantization level. For example, the transform coefficients may be divided by the quantizer value and truncated.

The quantized transform coefficients are then entropy encoded by the entropy encoding stage <NUM>. The entropy-encoded coefficients, together with other information used to decode the block (which may include, for example, syntax elements such as used to indicate the type of prediction used, transform type, motion vectors, a quantizer value, or the like), are then output to the compressed bitstream <NUM>. The compressed bitstream <NUM> can be formatted using various techniques, such as variable length coding or arithmetic coding. The compressed bitstream <NUM> can also be referred to as an encoded video stream or encoded video bitstream, and the terms will be used interchangeably herein.

The reconstruction path (shown by the dotted connection lines) can be used to ensure that the encoder <NUM> and a decoder <NUM> (described below with respect to <FIG>) use the same reference frames to decode the compressed bitstream <NUM>. The reconstruction path performs functions that are similar to functions that take place during the decoding process (described below with respect to <FIG>), including dequantizing the quantized transform coefficients at the dequantization stage <NUM> and inverse transforming the dequantized transform coefficients at the inverse transform stage <NUM> to produce a derivative residual block (also called a derivative residual).

At the reconstruction stage <NUM>, the prediction block that was predicted at the intralinter prediction stage <NUM> can be added to the derivative residual to create a reconstructed block. The loop filtering stage <NUM> can apply an in-loop filter or other filter to the reconstructed block to reduce distortion such as blocking artifacts. Examples of filters which may be applied at the loop filtering stage <NUM> include, without limitation, a deblocking filter, a directional enhancement filter, and a loop restoration filter.

Other variations of the encoder <NUM> can be used to encode the compressed bitstream <NUM>. In some implementations, a non-transform based encoder can quantize the residual signal directly without the transform stage <NUM> for certain blocks or frames. In some implementations, an encoder can have the quantization stage <NUM> and the dequantization stage <NUM> combined in a common stage.

<FIG> is a block diagram of a decoder <NUM> in accordance with implementations of this disclosure. The decoder <NUM> can be implemented in a device, such as the computing device <NUM> shown in <FIG> or the computing and communication devices 100A, 100B, 100C shown in <FIG>, as, for example, a computer software program stored in a data storage unit, such as the memory <NUM> shown in <FIG>. The computer software program can include machine-readable instructions that may be executed by a processor, such as the processor <NUM> shown in <FIG>, and may cause the device to decode video data as described herein. The decoder <NUM> can be implemented as specialized hardware included, for example, in the computing device <NUM>.

The decoder <NUM>, similar to the reconstruction path of the encoder <NUM> discussed above, includes in one example the following stages to perform various functions to produce an output video stream <NUM> from the compressed bitstream <NUM>: an entropy decoding stage <NUM>, a dequantization stage <NUM>, an inverse transform stage <NUM>, an intralinter prediction stage <NUM>, a reconstruction stage <NUM>, a loop filtering stage <NUM>, and a post filter stage <NUM>. Other structural variations of the decoder <NUM> can be used to decode the compressed bitstream <NUM>.

When the compressed bitstream <NUM> is presented for decoding, the data elements within the compressed bitstream <NUM> can be decoded by the entropy decoding stage <NUM> to produce a set of quantized transform coefficients. The dequantization stage <NUM> dequantizes the quantized transform coefficients (e.g., by multiplying the quantized transform coefficients by the quantizer value), and the inverse transform stage <NUM> inverse transforms the dequantized transform coefficients to produce a derivative residual that can be identical to that created by the inverse transform stage <NUM> in the encoder <NUM>. Using header information decoded from the compressed bitstream <NUM>, the decoder <NUM> can use the intralinter prediction stage <NUM> to create the same prediction block as was created in the encoder <NUM> (e.g., at the intralinter prediction stage <NUM>).

At the reconstruction stage <NUM>, the prediction block can be added to the derivative residual to create a reconstructed block. The loop filtering stage <NUM> can be applied to the reconstructed block to reduce blocking artifacts. Examples of filters which may be applied at the loop filtering stage <NUM> include, without limitation, a deblocking filter, a directional enhancement filter, and a loop restoration filter. Other filtering can be applied to the reconstructed block. In this example, the post filter stage <NUM> is applied to the reconstructed block to reduce blocking distortion, and the result is output as the output video stream <NUM>. The output video stream <NUM> can also be referred to as a decoded video stream, and the terms will be used interchangeably herein.

Other variations of the decoder <NUM> can be used to decode the compressed bitstream <NUM>. In some implementations, the decoder <NUM> can produce the output video stream <NUM> without the post filter stage <NUM> or otherwise omit the post filter stage <NUM>.

As mentioned above, the alpha channel describes transparency information. As a result, data of the alpha channel has different characteristics from that of color channels, such as typical luma or chroma channels. For example, the alpha channel often contains sharp edges between fully opaque areas (e.g., pixels with values of <NUM> in an <NUM>-bit representation) and fully transparent areas (e.g., pixels with values of <NUM>). Lossy compression of an image with an alpha channel may thus benefit from using different tools for the alpha channel as compared to those for the color tools. As compared to the inter- or intra-prediction tools described above with regards to <FIG> and <FIG>, an alpha channel may be more efficiently compressed in some circumstances using run-length encoding (RLE) or other techniques. Even where inter- or intra-prediction tools are used, the characteristics of the alpha channel may allow higher compression through a relatively large quantization value as opposed to that used for color channels, or by additional sub-sampling that reduces the number of pixels representing the underlying transparency data. Another technique, used alone or in combination with the previously-described compression techniques for the alpha channel, reduces the number of available values for inclusion in the encoded alpha channel to a smaller subset of values that are optimally selected by the encoder, such as the encoder <NUM>.

At least for the above reasons, lossy compression of the alpha channel often results in very visible compression artifacts, like noise in flat areas that may be referred to as ringing or mosquito noise. To mitigate artifacts in color channels, a deblocking filter may be applied after reconstruction of a channel, such as at the post filtering stage <NUM>. Although deblocking filters may be useful for block edge artifacts even in the alpha channel, they are not useful to mitigate ringing or mosquito noise in the alpha channel. Dithering is another technique that can be used to reduce artifacts in the reconstructed alpha channel when a reduced set of values (e.g., six values) is used for encoding. That is, after reconstructing the alpha channel, dithering may be applied on the values that are neither a minimum value, such as <NUM>, nor a maximum value, such as that associated with <NUM>-bit, <NUM>-bit, etc., representation. The dithering can use random or fixed patterns to perturb the initial values to result in a smoothed gradient in the alpha plane. The smoothed gradient is more visually pleasant than the original highly compressed alpha plane.

While dithering can be a useful technique to reduce banding, it is less successful for ringing or mosquito artifacts. A post processing filter specific to the alpha channel is desirable. A bilateral filter suitable for alpha channel post processing is described beginning with <FIG>.

<FIG> is a flowchart diagram of a technique or method <NUM> of coding using alpha channel post processing in accordance with implementations of this disclosure. The method <NUM> implements image coding, e.g., decoding. The method <NUM> can be implemented, for example, as a software program that may be executed by computing and communication devices such as one of the computing and communication devices 100A, 100B, 100C of <FIG>. The software program can include machine-readable instructions that may be stored in a memory such as the memory <NUM> of <FIG>, and that, when executed by a processor, such as the processor <NUM> of <FIG>, can cause the computing and communication device to perform the method <NUM>. In an example, the media data is an image that can be coded by a decoder, such as the reconstruction loop of the encoder <NUM> of <FIG>, or the decoder <NUM> of <FIG>. The method <NUM> can be implemented at least part in the post filtering stage <NUM>. The method <NUM> can be implemented using specialized hardware or firmware. Multiple processors, memories, or both, may be used.

At least a portion of an image decoding may be determined or identified from an encoded bitstream at <NUM>. Although not expressly shown in <FIG>, the determining may include obtaining, such as receiving via a wired or wireless electronic communication medium, such as the network <NUM> shown in <FIG>, or reading from an electronic data storage medium, such as the memory <NUM> shown in <FIG>, the encoded bitstream, such as the compressed bitstream <NUM>. The portion may include a current block or other image portion, such as a block <NUM> shown in <FIG>. The portion may correspond to a respective block within one or more color channels including respective color plane data, an alpha channel including alpha plane data, or both, of the encoded image.

At <NUM>, color channel values for the encoded image are decoded from multiple color channels of a bitstream. Each color channel representing the image portion (e.g., a block) may be separately decoded according to a decoding process that corresponds to the encoding process used to encode the image portion within the color channel. For example, the color channel values for a channel may be decoded by entropy decoding the color channel data (e.g., compressed residual data) for a block, dequantizing the entropy decoded values, inverse transforming the dequantized values to obtain a residual, generating an inter- or inter-predicted block used to encode the block, and reconstructing the color channel values of the block by combining the residual with the predicted block, such as described with regards to the decoder <NUM> of <FIG>. In this example, the color channels are lossily encoded, but the teachings herein equally apply where the color channels are losslessly encoded.

In some implementations, the color channel values are expressed with reference to a first color space. As a result, the multiple color channels of the bitstream may correspond to the first color space. For example, decoding the color channel values may include decoding the color channel values expressed in a color model based on a luminance component (Y) from a first color channel and two chrominance components (U and V or Cb and Cr) from respective second and third color channels. Accordingly, the decoded color channel values can include a luminance channel value, a first chrominance channel value, and a second chrominance channel value. While the YUV or YCbCr color model, or color space, may be used as the first color space (e.g., the color space for compression or a compressed color space), other color spaces may be used as the first color space.

At <NUM>, alpha channel values for the encoded image are decoded from an alpha channel of the bitstream. Similar to the color channels, data of the alpha channel representing the image portion (e.g., a block) may be separately decoded according to a decoding process that corresponds to the encoding process used to encode the image portion within the alpha channel. For example, the alpha channel values may be decoded by entropy decoding the alpha channel data (e.g., compressed residual data) for a block, dequantizing the entropy decoded values, inverse transforming the dequantized values to obtain a residual, generating an inter- or inter-predicted block used to encode the block, and reconstructing the alpha channel values of the block by combining the residual with the predicted block, such as described with regards to the decoder <NUM> of <FIG>. As mentioned previously, additional or other techniques may be used to compress the alpha channel, such as reducing the number of alpha values that are encoded and subsequently decoded.

As shown by the dashed line in <FIG>, determining an image portion at <NUM>, decoding color channel values at <NUM>, and decoding alpha channel values at <NUM> may be repeated for each of the encoded image portions within each of the channels. Although shown as a sequence of steps, decoding data of two or more of the channels may be performed concurrently, e.g., using parallel processing, or all encoded data of a respective channel may be decoded at <NUM> or <NUM> before proceeding to data of another channel.

After the alpha channel values are decoded at <NUM>, the method <NUM> includes determining a bilateral filter at <NUM> based on a level of compression for encoding the alpha channel. For example, a level of compression of the alpha channel may be identified by the value of one or more encoding parameters within or determined from the bitstream that are related to the compression (e.g., the relative quality) of the alpha channel by the encoder. Determining the bilateral filter may occur using a post filtering stage, such as the post filtering stage <NUM> of the decoder <NUM>.

In some implementations, the level of compression may be determined from the number of alpha values used to encode the alpha channel. For example, and as described briefly above, encoding the alpha channel can include using a reduced (i.e., a proper) subset of available alpha channel values. An encoder, such as the encoder <NUM>, can optimally select the values of the proper subset by forming different combinations of the values and selecting the proper subset as that combination that minimizes the errors resulting from mapping each of the alpha values of the original image to a closest value within the combination.

The size of the proper subset may be a fixed value at the encoder, and hence at a decoder. Where, however, a size of the proper subset of available values for the alpha channel can vary, the level of compression may be indicated by the number of alpha values such that a larger number of values indicates a higher quality of encoding than a fewer number of values. Thus, a proper subset of six values in an <NUM>-bit system (i.e., <NUM> values) represents a lower quality of encoding the alpha channel than the quality resulting from a proper subset of ten values in the <NUM>-bit system. Further, a proper subset of six values in an <NUM>-bit system represents a higher quality of encoding the alpha channel than the quality resulting from a proper subset of six values in a <NUM>-bit system.

In some implementations, the level of compression may be determined from the quantizer or quantization value of the alpha channel (e.g., decoded from the bitstream). That is, the quantization value of the alpha channel indicates the level of compression. The quantization value is that value used to quantize the alpha channel values in the encoder, such as in the quantization stage <NUM> of <FIG>, regardless of how many alpha values are used to represent the original image data. A larger quantization value represents a lower quality of encoding the alpha channel than the quality resulting from a smaller quantization value.

The bilateral filter determined at <NUM> may be one of a plurality of candidate bilateral filters that is based on the level of compression. Each candidate filter may be associated with a different level of compression. For example, where the quantization value of the alpha channel indicates the level of compression, a first candidate bilateral filter is associated with a first quantization value of the alpha channel, a second candidate bilateral filter is associated with a second quantization value of the alpha channel, the first quantization value is different from the second quantization value, and the first candidate bilateral filter is different from the second candidate bilateral filter.

Generally, a higher quality of encoding the alpha channel is associated with a bilateral filter having a weaker strength as compared to a lower quality of encoding the alpha channel. Stated differently, the lower the quality of encoding the alpha channel, the stronger (e.g., greater) the filtering by the bilateral filter. The higher the quality of encoding the alpha channel, the weaker (e.g., the lesser) the filtering by the bilateral filter. Accordingly, in the example above, where the first quantization value is greater than the second quantization value, the first candidate bilateral filter has a higher strength than the second candidate bilateral filter. Conversely, where the first quantization value is smaller than the second quantization value, the first candidate bilateral filter has a lower strength than the second candidate bilateral filter.

The parameters of a bilateral filter determine its strength. Accordingly, determining the bilateral filter using the level of compression at <NUM> may include determining or identifying at least one parameter of the bilateral filter using the level of compression. The parameters of the bilateral filter may be determined from the bitstream, inferred from the encoded data, or a combination thereof. The bilateral filter can include a spatial kernel and a range kernel, and these may be considered parameters of the bilateral filter. At least one of the spatial kernel or the range kernel may be based on the level of compression for encoding the alpha channel.

In some implementations, the spatial kernel of the bilateral filter comprises a two-dimensional (2D) kernel of at least two candidate kernel sizes. A candidate kernel size of the at least two candidate kernel sizes increases with the level of compression. For example, a smaller candidate kernel size is associated with a higher quality for encoding the alpha channel as indicated by a first value for the level of compression, and a larger candidate kernel size is associated with a lower quality for encoding the alpha channel as indicated by a second value for the level of compression. The first value for the level of compression and the second value for the level of compression may be different quantization values of the alpha channel, or may be different values of another encoding parameter that indicates the level of compression.

The spatial kernel may be illustrated with reference to <FIG> is a first example of a spatial kernel of a bilateral filter for alpha channel post processing, and <FIG> is a second example of a spatial kernel of a bilateral filter for alpha channel post processing. In these examples, the spatial kernel comprises the following equation (<NUM>).

In equation (<NUM>), i is a horizontal distance from the kernel center, j is a vertical distance from the kernel center, and radius is an integer that determines the kernel size. In some implementations, radius is an integer based on the level of compression. For example, radius may be either <NUM> or <NUM>, such that the spatial kernel has a kernel size of either 3x3 or 5x5. In the spatial kernel of <FIG>, radius is <NUM>, resulting in a kernel size of 3x3. The kernel center includes a multiplier of <NUM>. In the spatial kernel of <FIG>, radius is <NUM>, resulting in a kernel size of 5x5. Again, the kernel center includes a multiplier of <NUM>.

The smaller candidate kernel size of <FIG> is associated with a lower level of compression (i.e., a higher quality) for encoding the alpha channel, while the larger candidate kernel size of <FIG> is associated with a higher level of compression (i.e., a lower quality) for encoding the alpha channel. Assuming, for example, that the range kernel is unchanged with encoding parameters of the alpha channel, that is, the range kernel does not depend on the level of compression, two candidate bilateral filters would be available, one including the range kernel and the spatial kernel of <FIG>, and the other including the range kernel and the spatial kernel of <FIG>. Each candidate bilateral filter could be associated with a range of quantization values or other encoding parameter such that the appropriate candidate bilateral filter is selected based on the quantization value or other encoding parameter value used for encoding the alpha channel.

In some implementations, the range kernel of the bilateral filter comprises at least two candidate one-dimensional (1D) kernels. A level of smoothing (e.g., a strength) of the at least two candidate 1D kernels increases with increasing levels of compression. The range kernel can be illustrated with reference to <FIG> is a first example of a range kernel of a bilateral filter for alpha channel post processing, <FIG> is a second example of a range kernel of a bilateral filter for alpha channel post processing, and <FIG> is a third example of a range kernel of a bilateral filter for alpha channel post processing. In these examples, the range kernel comprises the following equation (<NUM>).

In equation (<NUM>), k ranges between <NUM> and the maximum absolute difference between two pixel values. In an example where the pixel values are between <NUM> and <NUM>, k ranges from <NUM> to <NUM>. Further, in equation (<NUM>), sigma is a smoothing parameter that is a positive integer, such that different values for the smoothing parameter result in candidate one-dimensional (1D) kernels having different levels of smoothing. In some implementations, sigma comprises one of at least two values, such that the range kernel has one of at least two different levels of smoothing.

In the range kernel of <FIG>, sigma is <NUM>. In the range kernel of <FIG>, sigma is <NUM>. Finally, in the range kernel of <FIG>, sigma is <NUM>. The range kernels of <FIG> only show the first <NUM> values of each candidate 1D kernel. There are <NUM> values in this example (corresponding to <NUM>-bit representation of the alpha channel values). The smallest value for sigma in <FIG> is associated with a lower level of compression (i.e., a higher quality) for encoding the alpha channel than the higher value for sigma in <FIG>. Similarly, the higher value for sigma in <FIG> is associated with a lower level of compression (i.e., a higher quality) for encoding the alpha channel than the highest value for sigma in <FIG>. More generally, a higher value of sigma, the higher the filter strength of the kernel. While three candidate range kernels are shown, fewer or more candidate range kernels may be used with different values for sigma.

Assuming, for example, that the spatial kernel is unchanged with encoding parameters of the alpha channel, that is, the spatial kernel does not depend on the level of compression, three candidate bilateral filters would be available in this example, one including the spatial kernel and the range kernel of <FIG>, a second including the spatial kernel and the range kernel of <FIG>, and a third including the spatial kernel and the range kernel of <FIG>. Each candidate bilateral filter could be associated with a range of quantization values or other encoding parameter such that the appropriate candidate bilateral filter is selected based on the quantization value or other encoding parameter value used for encoding the alpha channel.

In some implementations of the bilateral filters described herein, a parameter of each of the range kernel and the spatial kernel is based on the level of compression of encoding the alpha channel. In an example, the level of quantization of the alpha channel, which is transmitted in the bitstream, is used to select both a value of radius for the spatial kernel and a value of sigma for the range kernel. That is, candidate bilateral filters may be formed of combinations of spatial kernels of different kernel sizes and range kernels of different smoothing strengths. In examples where the value of radius for the spatial kernel can be <NUM> or <NUM> and the value of sigma for the range kernel can be <NUM>, <NUM>, or <NUM>, there may be up to <NUM> candidate bilateral filters, each associated with respective level of compression of encoding the alpha channel.

In some implementations, determining the bilateral filter at <NUM> uses a fixed decision tree in the decoder and a level of compression of encoding the alpha channel as indicated by one or more encoding parameters of the alpha channel. In an example, an alpha quality factor "q" may be read or otherwise determined from the bitstream that has a value that ranges from <NUM> (lowest quality) to <NUM> (highest quality). The alpha quality factor "q" may be, for example, based on the quantization value of the alpha channel, the number of different alpha values encoded into the alpha channel, or some combination of these encoding parameters or others. A decision tree could implement a selection process using "q". In one non-limiting example, if q is below <NUM>, the bilateral filter uses the spatial kernel having radius equal to <NUM> and the range kernel having sigma equal to <NUM>. If q is between <NUM> and <NUM>, the bilateral filter uses the spatial kernel having radius equal to <NUM> and the range kernel having sigma equal to <NUM>. If q is between <NUM> and <NUM>, the bilateral filter uses the spatial kernel having radius equal to <NUM> and the range kernel having sigma equal to <NUM>. If q is between <NUM> and <NUM>, the bilateral filter uses the spatial kernel having radius equal to <NUM> and the range kernel having sigma equal to <NUM>.

Once a bilateral filter is determined at <NUM>, the method <NUM> includes post processing the alpha channel values using the bilateral filter at <NUM>. Post processing may occur using a post filtering stage, such as the post filtering stage <NUM> of the decoder <NUM>. Post processing the alpha channel values can include filtering the alpha channel values using the bilateral filter to obtain filtered alpha channel values. As just one example of applying the bilateral filter, for brevity, it is assumed that the spatial kernel defined by equation (<NUM>) has radius equal to <NUM> and the range kernel defined by equation (<NUM>) has sigma equal to <NUM>. For a pixel at coordinates (<NUM>, <NUM>) whose alpha value is <NUM>, the filter loops over all pixels around this kernel center that are in range for the spatial kernel, so at a distance of <NUM> horizontally or vertically, which means pixels (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>), (<NUM>, <NUM>). For each pixel, a weight is computed, which is the weight from the spatial kernel, multiplied by the weight from the range kernel. For example, for the pixel at coordinates (<NUM>, <NUM>), the spatial weight is <NUM>. Assuming the alpha value of pixel (<NUM>, <NUM>) is <NUM>, the difference in value with the current pixel is <NUM>, so the range weight is <NUM>. The final weight is <NUM> * <NUM>. The new (i.e., filtered) alpha value of the filtered pixel is the weighted sum of the pixels around it, divided by the sum of the weights. When an adjacent pixel to the kernel center is unavailable a value of <NUM> may be used in the calculations or padding using existing adjacent pixels may be used. Other pixels are similarly filtered.

After post processing the alpha channel values to obtain the filtered alpha channel values at <NUM>, at least a portion of a reconstructed image corresponding to the encoded image is generated at <NUM> using the filtered alpha channel values and the color channel values. Generating at least the portion of the reconstructed image at <NUM> can include aligning an alpha layer comprising the filtered alpha channel values with multiple color layers, each comprising the decoded color channel values of a respective color. The reconstructed image may be stored or output at <NUM>, such as via the output stream <NUM> shown in <FIG>, such as for presentation or display to a user.

In some implementations, determining the bilateral filter at <NUM>, post processing the alpha channel values at <NUM>, and generating at least a portion of a reconstructed image (e.g., a block) at <NUM> may be repeated separately for multiple portions of the image. Because values for encoding parameters of the alpha channel are more often shared over the entire image, determining the bilateral filter at <NUM>, post processing the alpha channel values at <NUM>, and generating at least a portion of a reconstructed image at <NUM> may be performed once for the entire image after decoding all of the alpha channel values at <NUM>.

Decoding the color channel values at <NUM> can optionally include color space conversion of the decoded color channel values from a first color space, such as from the YUV color space to a second color space. The second color space may be the RGB color space, which includes a red color channel (R), a green color channel (G), and a blue color channel (B). Accordingly, the decoded color channel values can include a red color channel value, a green color channel value, and a blue color channel value. Other color spaces that are or may be further transformed into a visually-perceptible color space for display, such as using a user interface <NUM>, are also suitable for use. The color channel values may be converted to an intermediate color space before being converted to the second color space. The second color space may be the input color space of the original image data.

In some implementations, the input image may be a pre-multiplied image where the alpha channel (i.e., the transparency) is applied to the input color space, e.g., red, green, and blue color channels before conversion to and encoding in the first color space (e.g., YUV). Alternatively, the input image includes unmodified pixel values in the input color space that are converted to an encoded image in the first color space.

Although not expressly shown in <FIG>, the color channel values decoded at <NUM> is filtered using other than a bilateral filter. In an example, the filtering of the color channel values occurs using a post processing filter before generating the reconstructed image at <NUM>. The filtering may occur at a post filtering stage, such as the post filtering stage <NUM> of the decoder <NUM>. The post processing filter may be a deblocking filter in some implementations.

In general, a bilateral filter may be used as an edge-preserving and noise-reducing smoothing filter for an image. In image compression, however, its use in post processing is undesirable as it would smooth detail of color channels. Application of a bilateral filter in post processing on decompressed alpha values effectively reduces noise added by a lossy compression process without a significant loss of detail. The impact of the filter on visual quality is so large that the filter allows using much more aggressive compression of the alpha channel than would be acceptable in its absence. The strength of the filter can be adjusted depending based on explicit parameters (i.e., those transmitted in the bitstream), implicit parameters (i.e., those deduced from the decoded image), or both, so that differences in encoding quality can be addressed.

<FIG> is a reconstructed image without the alpha channel post processing described herein, and <FIG> is the reconstructed image of <FIG> including the alpha channel post processing described herein. As can be seen in <FIG>, ringing or mosquito artifacts are visible in the flat regions of the image, such as to the left of the letter "g" and above and below the subsequent letters. These artifacts result from the compression of the alpha channel. The artifacts are substantially reduced by application of the alpha channel post processing herein, as can be seen from <FIG>.

For simplicity of explanation, the method <NUM> of <FIG> is depicted and described as series of steps or operations. However, the steps or operations in accordance with this disclosure can occur in various orders and/or concurrently. Additionally, other steps or operations not presented and described herein may be used. Furthermore, not all illustrated steps or operations may be required to implement a method in accordance with the disclosed subject matter.

The word "example" and the like are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as "example" or the like is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the word "example" or the like is intended to present concepts in a concrete fashion. As used in this application, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or. " That is, unless specified otherwise or clear from context, "X includes A or B" is intended to mean any of the natural inclusive permutations thereof. That is, if X includes A; X includes B; or X includes both A and B, then "X includes A or B" is satisfied under any of the foregoing instances. In addition, the articles "a" and "an" as used in this application and the appended claims should generally be construed to mean "one or more" unless specified otherwise or clear from context to be directed to a singular form. Moreover, use of the term "an embodiment" or "one embodiment" or "an implementation" or "one implementation" throughout is not intended to mean the same embodiment or implementation unless described as such. As used herein, the terms "determine" and "identify," or any variations thereof, include selecting, ascertaining, computing, looking up, receiving, determining, establishing, obtaining, or otherwise identifying or determining in any manner whatsoever using one or more of the devices shown in <FIG> or <FIG>.

Further, for simplicity of explanation, although the figures and descriptions herein may include sequences or series of operations or stages, elements of the methods disclosed herein can occur in various orders and/or concurrently. Additionally, elements of the methods disclosed herein may occur with other elements not explicitly presented and described herein. Furthermore, one or more elements of the methods described herein may be omitted from implementations of methods in accordance with the disclosed subject matter.

The implementations of the transmitting computing and communication device 100A and/or the receiving computing and communication device 100B (and the algorithms, methods, instructions, etc., stored thereon and/or executed thereby) can be realized in hardware, software, or any combination thereof. The hardware can include, for example, computers, IP cores, ASICs, programmable logic arrays, optical processors, programmable logic controllers, microcode, microcontrollers, servers, microprocessors, digital signal processors, or any other suitable circuit. In the claims, the term "processor" should be understood as encompassing any of the foregoing hardware, either singly or in combination. The terms "signal" and "data" are used interchangeably. Further, portions of the transmitting computing and communication device 100A and the receiving computing and communication device 100B do not necessarily have to be implemented in the same manner.

Further, in one implementation, for example, the transmitting computing and communication device 100A or the receiving computing and communication device 100B can be implemented using a computer program that, when executed, carries out any of the respective methods, algorithms, and/or instructions described herein. In addition or alternatively, for example, a special-purpose computer/processor, which can contain specialized hardware for carrying out any of the methods, algorithms, or instructions described herein, can be utilized.

The transmitting computing and communication device 100A and the receiving computing and communication device 100B can, for example, be implemented on computers in a real-time video system. Alternatively, the transmitting computing and communication device 100A can be implemented on a server, and the receiving computing and communication device 100B can be implemented on a device separate from the server, such as a hand-held communications device. In this instance, the transmitting computing and communication device 100A can encode content using an encoder <NUM> into an encoded video signal and transmit the encoded video signal to the communications device. In turn, the communications device can then decode the encoded video signal using a decoder <NUM>. Alternatively, the communications device can decode content stored locally on the communications device, for example, content that was not transmitted by the transmitting computing and communication device 100A. Other suitable transmitting computing and communication device 100A and receiving computing and communication device 100B implementation schemes are available. For example, the receiving computing and communication device 100B can be a generally stationary personal computer rather than a portable communications device, and/or a device including an encoder <NUM> may also include a decoder <NUM>.

Claim 1:
A method of decoding using alpha channel post processing, comprising:
decoding, from multiple color channels of a bitstream, color channel values for an encoded image (<NUM>);
decoding, from an alpha channel of the bitstream, alpha channel values for the encoded image (<NUM>);
determining a bilateral filter based on a level of compression for encoding the alpha channel (<NUM>);
post processing the alpha channel values by filtering the alpha channel values using the bilateral filter to obtain filtered alpha channel values (<NUM>);
filtering, using a color channel filter that is other than a bilateral filter, at least some of the color channel values to obtain filtered color channel values; and
generating at least a portion of a reconstructed image corresponding to the encoded image using the filtered alpha channel values and the filtered color channel values.