The present disclosure relates generally to images. More particularly, an embodiment of the present disclosure relates to synthesizing film grain and camera noise for images.
As used herein, the term noise synthesis refers to the generating noise effects for a digital image (including video frame) by means other than how that noise would normally occur. Unless a particular sense is explicitly specified to have particular significance at any point in the description herein, it should be inferred that the term may be used in either sense, e.g. interchangeably.
The photographic film strip was the canvas for traditional photography before the advent of digital technology. This film is a thin plastic sheet covered with light sensitive material (for example, silver halide) to absorb the light emanated from or reflected off objects to be filmed. After processing these films, the captured light can be transformed into an image. As used herein, “film grain” refers to a visual texture developed in the processed image due to dye clouds (or silver particles) receiving enough photons. It is an optical phenomenon caused by chemical processes going on during the processing of the film and depends upon both the definition the film is observed at, and the type of film stock used.
Digital photography is inherently devoid of the film grain effect. But for artistic and quality reasons, it is still desired. For example, Hollywood studios prefer the movie content to have film grain. For digital images, film grain pattern has to be synthesized and overlaid on the image during post-processing.
“Camera noise” refers to variations of brightness and/or color (colored specks on the image) in a digital image due to the electronics of the camera, such as sensor size, exposure times, ISO settings, or the like. Typically, camera noise is removed from digital images by varying techniques in order to avoid problems in compression, but in some cases camera noise is desired to have an image keep the original “look” it had when captured.
As used herein, the term “metadata” relates to any auxiliary information that is transmitted as part of the coded bitstream and assists a decoder to render a decoded image. Such metadata may include, but are not limited to, color space or gamut information, reference display parameters, and auxiliary signal parameters, as those described herein.
In practice, digital images comprise one or more color components (e.g., luma Y and chroma Cb and Cr) wherein each color component is represented by a precision of n-bits per pixel (e.g., n=8). Using linear luminance coding, images where n<8 (e.g., color 24-bit JPEG images) are considered images of standard dynamic range (SDR), while images where n>8 may be considered images of enhanced dynamic range (EDR). EDR and high dynamic range (HDR) images may also be stored and distributed using high-precision (e.g., 16-bit) floating-point formats, such as the OpenEXR file format developed by Industrial Light and Magic.
As used herein, the term “noise synthesis” includes, but is not limited to, synthesizing the noise normally caused by film/video/image capture or development, such as film grain or camera noise, in a digital image. The term can also refer to any artificially inserted noise into a digital image, for any purpose.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section. Similarly, issues identified with respect to one or more approaches should not be assumed to have been recognized in any prior art on the basis of this section, unless otherwise indicated.
Apparatus and methods according to the present disclosure provide solutions to the problem of synthesizing noise for a digital image. According to an embodiment of the present disclosure, synthesized film grain is added to a clean (i.e. noise free) digital sequence.
The process of synthesizing noise as presented herein has numerous advantages in image transmission and display. For example, the ability to synthesize noise post-transmission allows the transmission of a noise-free compressed image, which can provide increased transmission efficiency (data speed, bandwidth, etc.). The addition of synthesized noise to the uncompressed image can reduce the effect of compression artifacts in the displayed image. The use of noise blocks allows for control of film grain size, sharpness, and type (noise source emulation), and their random placement in the image prevents the blocking artifacts that would be caused by tiled placement. Additionally, for a hardware-based implementation, the use of per-line processing allows for a resource efficient implantation of noise synthesis.
According to a first aspect of the present disclosure, a computer-based method for creating a synthesized noise image for a digital image is disclosed, the method comprising: providing a plurality of noise block patterns; initializing a noise image; generating a probability image comprising randomly generated probability values at each pixel of the probability image, comparing each probability value in the probability image with a threshold criterion; if the probability value satisfies the threshold criterion, selecting a noise block pattern from the plurality of noise block patterns, the noise block pattern having an anchor point; and if the probability value satisfies the threshold criterion, creating synthesized noise image by placing the noise block pattern in the noise image such that the anchor point corresponds to a pixel in the probability image that meets the threshold criterion.
The noise grain block patterns can be selected randomly. The probability values of the probability image can be uniformly distributed probability values. The noise block patterns can comprise film grain block patterns. The method can also include aggregating values in regions of the noise image where the noise block patterns overlap. The method can include generating the noise block patterns before generating the noise image, wherein the noise block patterns are generated through an inverse DCT technique. This generating can include removing low frequency DCT coefficients and/or removing high frequency DCT coefficients. The probability image and the noise image can be sized to match a video frame. The method can include editing a content image by adding the noise image to a channel of the content image. The method can include multiplying values in the noise image by a modulation factor before adding the noise image to the content image. The values can be luma intensity values of the noise image. The method can include generating a YUV content image based on the edited content image. The method can include generating an RGB content image based on the YUV content image. The method can be run on a computer program product comprising data encoded to perform the method.
The method can be run by a noise synthesis module to create a synthesized noise image for a device. The device can include a decoder decoding an encoded image, creating a decoded clean sequence, wherein the decoder is configured to combine the synthesized noise image with the decoded clean sequence, creating a rendered image for display. The device can include a modulation curve module for modulating the synthesized noise image prior to combining with the decoded clean sequence.
According to a second aspect of the present disclosure, a device for creating synthesized noise in an image, the device comprising: a line buffer comprising a row from the image; firmware comprising noise block patterns; a pseudo random number generator providing a random value for a pixel in the row; logic for comparing the random value with a threshold criterion; NBMT data store comprising a noise block management table; logic populating the noise block management table based on a random noise block pattern from the firmware being associated with a pixel in the row where the random value associated with the pixel meets the threshold criterion; logic computing a noise value for each pixel location in the row of the image based on the noise block management table; and logic modifying the row based on the noise value.
The device can include logic for determining a modulation curve from the image, computing a modulation factor, and applying the modulation factor to the noise value prior to modifying the row. The pseudo random noise generator can generate random numbers based on the row index and a random offset value. The image can be a luma channel image or a chroma channel image. The device can include multiple pseudo random number generators and multiple line buffers processing the image in parallel.
According to a third aspect of the present disclosure, a method for generating metadata for a decoder, the method comprising: setting a noise category parameter; setting a block size parameter; setting a threshold parameter; and setting a modulation factor curve parameter.
The method for generating metadata can include setting a noise variance parameter, setting a number of block patterns parameter, and/or setting a noise block management table entries parameter.
Throughout the present disclosure, probability image is defined as a digital image made from random values.
Noise refers to a random variation of brightness (luma) and/or color (chroma) information in a digital image caused by an effect other than the environment being imaged.
Film grain refers to a random optical texture on an image, such as would be caused by film processing. Film grain is a noise in the luma channel.
Grain size refers to the average diameter of the individual grains of the film grain.
Camera noise refers to a random optical texture on an image, such as would be caused by digital camera hardware. Camera noise is a noise in both the luma and chroma channels.
Camera noise, non-synthesized, arises from a number of sources including sensor size, thermal effects, long exposure times, high ISO settings, etc.
DCT refers to discrete cosine transform, and IDCT refers to an inverse discrete cosine transform.
Digital image refers to an image, or a frame of a video, that is numerically represented.
Systems and methods for synthesizing noise, such as film grain or camera noise, onto a digital image (including video) is described herein. In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present disclosure. It will be apparent, however, that the presently claimed subject matter may be practiced without these specific details. In other instances, well-known structures and devices are not described in exhaustive detail, in order to avoid unnecessary occluding, obscuring, obfuscating the present disclosure.
The noise synthesis does not need to be tied to a decoder. For example, a video producer can use noise synthesis for video production pre-release. For the case of non-decoder implementation, the decoded clean sequence (125) can be replaced with a content image to be edited. For example, a noise image can be synthesized by a colorist, then later modulated before adding it to a content image.
The noise can be in the luma channel, the chroma channel, or both, depending on the desired effect. For example, for emulating film grain, the noise could just be in the luma channel. To emulate the noise induced by digital camera hardware, the noise could be in the luma and chroma channels. Various types of noise emulation are possible by adjusting the metadata parameters appropriately.
Noise for digital images can be synthesized by a process of adding noise block patterns to the images through a probability image. The concept is to add block patterns on a pixel-by-pixel basis, rather than dividing the original image up into blocks.
In order to synthesize a film grain block pattern of size B×B, start with a B×B matrix M of standard normal random numbers (e.g. B=4, 8, etc.). Matrix M represents 2D DCT coefficients with the top left being the DC (frequency=0) coefficient and bottom right being the highest frequency AC (frequency>0) coefficient. The DC coefficient is labelled 1 (210) and the labels increase in a zigzag order as shown in
These frequency coefficients can be broadly classified into three bands, namely, low, mid and high, as shown in
Let Mmid represent the matrix M with only mid-frequency coefficients preserved and low/high coefficients set to zeros. The film grain block Graw can be constructed by taking inverse DCT of Mmid as shown in equation 1.
Graw=iDCT(Mmid) equation 1
The block is normalized by dividing each element by the energy E and then it is scaled to desired multiplier V as shown in equation 2.
Thnorm is a threshold value normalized to the interval [0, 1). An example value for Thnorm is 0.1. σn2 is the noise variance. The noise variance is a tunable parameter. An example range for 16 bit images can be 1000 to 6000.
Rounding is performed towards the end to get rid of any fractional parts as shown in equation 3.
The pseudocode for computing the film grain matrix G is outlined below. The function zigzag( ) gives out the frequency label at each location in the matrix. The range of frequency coefficients to be preserved is [fs, fe].
Multiple noise patterns with different block dimensions can be constructed to be used later for putting together the synthesized noise image. 4×4, 8×8, 16×16 and 32×32 are some typical block sizes. Size of the film grain can be changed by modifying the frequency range. If the proportion of frequency coefficients closer to the LF region is significant in the frequency range [fs, fe], the grain size will be larger. On the contrary, if the portion of frequency coefficients closer to the HF region is significant, then it will produce smaller grains. For an 8×8 block example, the frequency coefficients range [4-10] will produce larger grains compared to [4-36].
Several noise blocks having different sizes can be pre-computed and stored in block patterns dataset {tilde over (G)}. This database can be viewed as a 3D matrix with Q number of 2D noise blocks stacked one after the other. If L×L is the maximum size of the film grain block, then dimension of {tilde over (G)} is L×L×Q. A vector S having Q elements can be maintained to store the corresponding size of each block in the pattern dataset, i.e. S(i)≤L for i∈[0, Q−1].
The noise blocks can be placed such that the location in the probability image is in the upper left-hand corner (320) of the noise block, as shown in
A block pattern selector (305) will randomly pick a film grain block pattern to be inserted at the location in set T. This block selector can be a uniform random number generator. After the blocks are placed at appropriate locations, there is a possibility that these blocks might overlap as shown in
In order to synthesize the film grain image I, consider the block pattern dataset {tilde over (G)}. At every location in the set Ψ, a block can be randomly picked from the dataset to be inserted into the film grain image. Let r be the index of that randomly selected block for the current location, where r˜Uniform[0, Q−1]. The dimension of this block G′ is S(r)×S(r), such that, G′={tilde over (G)}(0: S(r)−1,0: S(r)−1, r). A different random number r can be selected every time there is a new block to be inserted at the current location. Pseudocode for this can be shown as:
I=0H×W
i=0→H−1
j=0→W−1
P(i,j)=pi,j, where pi,j∈[0, 1)
Ψ={i,j|P(i,j)<Thnorm}
For each pair i,j in Ψ
I(i:i+S(r)−1, j:j+S(r)−1)=I(i:i+S(r)−1, j:j+S(r)−1)+G′
G′ denotes the random block selected for the location i,j based on the random number r. In other words, for each location i,j a random number r is selected, then a Gr is generated as a function of r.
For the case of synthesizing film grain or similar noise, the noise can be quite annoying and intrusive in the bright regions of the image. The intensity based luma modulation curve reduces the strength of noise in these bright regions, making film grain infused images more desirable to the viewer. Film grain images are generated beforehand, as described in the previous sections. These images are then modulated based on collocated luma intensity and added to the luma channel.
Sample luma modulation curves are shown in
Suppose the intensity value of luma channel be denoted by l in Bt-bit codeword range. As an example, with no limitation, a modulation factor curve f(⋅) can be calculated as shown in equation 4.
In equation 4, α and β denote the curve parameters.
The liberty to choose α or β makes it possible to use the same equation for different Electro-Optical Transfer Functions (EOTFs).
If Y(i,j)=yij is the luma intensity at location (i,j) in the Y channel image, then noise value at location (i,j) in the noise image can be multiplied by f(yij) and added to the luma channel to get the noise infused luma value Ŷ(i,j)=Y(i,j)+I(i,j)×f(yij).
Digital camera noise can be synthesized using Gaussian random numbers. The random numbers can be generated, for example, from uniform random numbers using a Box Muller Transform or a Marsaglia Polar Method.
For the Marsaglia Polar Method for generating the Gaussian random number from uniform random numbers, suppose u1 and u2 are two uniform random numbers selected from the range [0,1]. If the condition 0<u12+u22<1 is satisfied, then the number
is Gaussian random number with zero mean and unit standard deviation. Care should be taken to avoid allowing the process from looping too long before the condition is satisfied.
As digital camera noise can be simulated with Gaussian random numbers, synthesizing the camera noise image boils down to generating a 2D matrix having the dimension of the image and containing Gaussian random numbers with zero mean. The noise image is modulated with luma intensity as discussed previously. The noise image can then be added to the Y, U and V channels of the content followed, optionally, by color space conversion (for example, to RGB).
When implementing noise synthesis in a hardware, as opposed to software, solution, four factors should be taken into account for optimization.
To optimize the system for a hardware implementation, the noise synthesis algorithm can be adjusted to take these factors into account.
There is no explicit probability image in the hardware solution. Instead, there is a pseudo random number (PRN) sequence generator (1010-1015) for each row of the image. For each entry (pixel) in the row R, the PRN module generates a new random number. The PRNs can be seeded (1005) from a function of the row index and a random offset. If the random number is less than a threshold (1020) and there is enough room in the Noise Block Management Table (NBMT) (1090), then a film grain block (1070) from the set of film grain patterns (1030) is randomly selected to be inserted starting at this location (1065). The block is not added to the image straight away, but rather the system puts an entry (1025) of that block in the NBMT (1090). The NBMT-to-pixel-value logic block (1035) computes the noise value at the current location in the luma channel image (1045). For hardware implementation, the threshold Th is not normalized, thereby reducing computation cost. The non-normalized threshold is represented without the subscript “norm” in the symbol and it is related to the normalized threshold by the equation Th=round(Thnorm×2B
The reason for using pseudo random number generators from the previous rows, while computing the noise value at the current location, is one of efficiency. If B (noise block size) is significantly large, then reading/writing B rows on each pass would significantly add to memory Input/Output (I/O) and hardware cost by requiring B line buffers in the memory.
On the contrary, the present solution requires only one line buffer, irrespective of the block size. For a given location, there might be overlapping blocks from the previous rows. These blocks are shown by dashed squares (1070) in the image (1060) in
Although the original and film grain infused luma channel row R is shown separately in
The film grain block patterns are generated using the process similar to that described for a software-based solution. As the mechanism to compute these block patterns requires use of complex mathematical operations, this task can be handed over to the firmware. The synthesized blocks can be later stored in the on-chip SRAM for easy hardware access.
Another major challenge with hardware implementation is the random number generator. For faster implementation, a linear feedback shift register based pseudo random number generator can be used. Some bits in those random numbers are used to select the film grain block from the dataset of block patterns.
Linear feedback shift registers are commonly used to generate a sequence of random numbers in hardware chips. Consider the example 16-bit register shown in
If the locations of tap points are properly selected, the register goes through all the different 16-bit numbers once before returning to the same number. In other words, the sequence repeats itself after a certain period. It can be seen that the next random number is a function of the current state of the register. Therefore, care has to be taken to make sure that the register is not initialized to all zeros. For the all zero case, the process will get locked in that state.
The hardware implementation does not explicitly produce a probability image of H×W dimension. As a work-around, random numbers in each row can be generated using a linear feedback shift register. The shift register allotted to each row is initialized with a different random seed. This seed is a function of row index R and a random offset, SeedR-(Const+R×Offset) mod 2D, where D is the length of the register. The random offset is derived from the current timestamp and the constant is set to any large number, like 214 for a 16-bit shift register. The offset is randomly chosen but it is fixed for every row in the current frame. Though there is a different pseudo random number generator for each row, at any given point in time there are no more than B shift registers in the hardware. Here, B×B is the dimension of the block in block patterns dataset.
The seed is deterministic as the constant, offset and row index are known. The idea behind making this seed deterministic is to reproduce the sequence of random numbers that the earlier rows have gone through when dealing with the current row R. This allows determination of the locations of the overlapping film grain blocks from the earlier rows and using that knowledge to compute the film grain value for the current location.
Along with the random sequence generator, a table can be used to store the information about the location of blocks in the previous rows. This table is the called noise block management table (NBMT).
NBMT stores the information of the film grain blocks infused into the luma channel for the specific row. Every PRN sequence generator (see
To compute the final value at each location, the system needs to consider all the blocks that overlap with that location. The noise block management tables keep track of these overlapping blocks, by storing the block id bi, origin X-coordinate xi and origin Y-coordinate yi of the block in the image. For speed and computational efficiency, the maximum number of entries in the table is limited to
For example, suppose the size of the film grain block pattern is B×B and the system is computing the film grain infused value at location (C,R) in the noise infused luma channel image, then the block originating at B−1 rows above or B−1 columns to the left can still influence the current location. For this reason, while processing the current row R, the system considers B−1 rows above it.
As illustrated in
Let C represent the current column in row R being processed. Row R of the luma channel image is read into the line buffer. The column C is incremented from C=0 to C=W−1 in steps of 1. For each value of C the system can perform the following steps:
For a hardware-implemented luma intensity based noise modulation technique, the non-linear curves of the software-implementation should be replaced by piecewise linear segments to avoid wasting memory cycles on non-linear arithmetic. Parameters for these line segments can be signaled to the decoder in the metadata. The system can then compute the modulation factor for each luma intensity value from the piecewise linear curve.
Furthermore, the values in the curve for software implementation are fractional numbers. In the hardware, the fractional numbers are cumbersome to operate with. Therefore, values in the curve
can be scaled to Bc=8-bit integers before piecewise linear approximation i.e. fhw(l)=round(f(l)×2B
For every two pivots on the curve, namely, x1=Ω(k) and x2=Ω(k+1), the system computes the equation of kth line segment that connects the points y1=fhw(x1) and y2=fhw(x2). The equation of the line has three parameters, slope, X-intercept (x1) and Y-intercept (y1).
Slope, pivots and Y intercept parameters for each segment are sent to the decoder. The curve is reconstructed at the decoder to compute the modulation factor for each luma intensity. For illustration,
Similar to the film grain noise, hardware implementation of digital camera noise also has several restrictions.
One embodiment of digital camera noise synthesis in hardware limits the block size for digital camera noise patterns to lxi and the probability threshold for row R is set to 2D while other rows have a threshold of zero. Setting the probability threshold to 2D ensures that block is added to every pixel location in the Y channel. As the block size is restricted to lxi, there is no overlap between blocks. Therefore, there is only one entry in the NMBT of row R.
There is a pseudo random number generator for each row. While processing a row R and column C, if the pseudo random number is less than 2D then the system adds a digital camera block to that pixel. As these random numbers are always less than 2D, the system adds Gaussian random number at each location. A block is randomly selected using the leading bits of the pseudo random number generator. The information of that block can be inserted in the NBMT of that row. NBMT to pixel value logic calculates the digital camera noise value. This value is modulated with the modulation factor and added to the column C of the line buffer. For blocks of size 1×1, B=1 and the NBMT to pixel value logic is straightforward as there is no overlap from neighboring blocks.
Digital camera noise is also added to chroma channels, as opposed to film grain which is only added to the luma channel. The architecture for camera noise injection into luma and chroma channels is essentially the same. The design for chroma channels can simplified by removing superfluous components like extra pseudo random number generators, threshold block, NBMTs and NBMT to pixel value logic etc. from hardware architecture of
For an example, suppose there are 1024 block patterns for digital camera noise. Then the first 10-bits of the PRN Row R can be used to compute the block index bi. The 1×1 block is picked from the dataset, modulated with luma intensity and added to the chroma channel line buffer at the current location.
For YUV 444 sequences, the modulation factors can be computed from collocated intensities in luma channel. The noise value is added to the chroma channels after modulation. In other words, the noise value is first modulated with the luma intensity and then added to the chroma channels.
For YUV 422 sequences, the Y channel can be subsampled to half in width and then modulation factors are computed from collocated pixels in Y channel. The noise value is modulated with the down sampled luma intensity and then added to the chroma channels. Down sampling using traditional filtering approach might be expensive for hardware. But modulation factor can work with a crude and approximate down sampling. To reduce hardware complexity, the luma channel is subsampled by simple averaging of neighboring elements in the row of luma channel. The process is elaborated in the following pseudo code. Symbol Yhh denotes the horizontally down sampled version of luma channel Y by taking average of neighboring elements in the same row.
Yhh=0H×W/2
i=0→H−1//vertical
j=0→W/2−1//horizontal
Yhh(i,j)=(Y(i, 2j)+Y(i, 2j+1))>>1//middle is the average of left and right
There are two different scenarios, wherein, the noise infusion model will be used to inject noise into the content. In the first scenario, the content provider can control the look of the noise to be added to the video. The parameters will be set at the encoder side and transmitted to the decoder as a part of the metadata. For the second scenario, the decoder can synthesize noise based on viewing conditions or display specifications. The content provider's settings can have higher priority over the local adjustments, or vice versa.
Noise synthesis parameters can be set at different stages of the workflow, namely, encoder-side content provider preferred settings or decoder-side locally adaptive settings. The decoder parameters can be configured into firmware or hardware.
For artistic reasons, the content provider might want to add film grain or camera noise to the video sequence for cinematic effect. The noise gets compressed while encoding and as a result, the cinematic effect is diminished at the decoder side. Moreover, a higher bit rate is required to compress noisy sequences, so sending a noise free sequence along with the parameters to generate the noise at the decoder side lowers the bit rate requirements and still preserves the cinematic effect. To that end, there is an option to set the parameters at the encoder-side and send them to the decoder through metadata. The parameters are listed in Table 2.
The parameters can be read from the metadata to initialize the noise generation module at the decoder side. Likewise, the parameters can be adjusted at the decoder side based on the viewing environment or display specifications. Either way, decoder has to synthesize the noise given a set of parameters. The decoder consists of firmware or processor and hardware system. The firmware can compute complex mathematical functions at cost of speed, but hardware can perform low-level logical operations at faster rate.
Based on speed requirements and computational complexity, the task of noise image generation has to be split into firmware and hardware. Synthesizing film grain or camera noise blocks is computationally intensive for hardware, so it can be handed over to the firmware. There are only a few block patterns to build, so the firmware can easily build those during system boot up without much processing overhead.
EE1. A computer-based method for creating a synthesized noise image for a digital image, the method comprising: providing a plurality of noise block patterns; initializing a noise image; generating a probability image comprising randomly generated probability values at each pixel of the probability image, comparing each probability value in the probability image with a threshold criterion; if the probability value satisfies the threshold criterion, selecting a noise block pattern from the plurality of noise block patterns, the noise block pattern having an anchor point; and if the probability value satisfies the threshold criterion, creating synthesized noise image by placing the noise block pattern in the noise image such that the anchor point corresponds to a pixel in the probability image that meets the threshold criterion.
EE2. The method of EE1, wherein the noise grain block patterns are selected randomly.
EE3. The method of EE1 or EE2, wherein the probability values of the probability image are uniformly distributed probability values.
EE4. The method of any one of EE1-EE3, wherein the noise block patterns comprise film grain block patterns.
EE5. The method of any one of EE1-EE4, further comprising aggregating values in regions of the noise image where the noise block patterns overlap.
EE6. The method of any one of EE1-EE5, further comprising generating the noise block patterns before generating the noise image, wherein the noise block patterns are generated through an inverse DCT technique.
EE7. The method of EE6, wherein the generating further comprises removing low frequency DCT coefficients.
EE8. The method of EE6 or EE7, wherein the generating further comprises removing high frequency DCT coefficients.
EE9. The method of any one of EE1-EE8, wherein the probability image and the noise image are sized to match a video frame.
EE10. The method of any one of EE1-EE9, further comprising: editing a content image by adding the noise image to a channel of the content image.
EE11. The method of EE10, further comprising: multiplying values in the noise image by a modulation factor before adding the noise image to the content image.
EE12. The method of EE11, wherein the values are luma intensity values of the noise image.
EE13. The method of any one of EE10-EE12, further comprising: generating a YUV content image based on the edited content image.
EE14. The method of EE13, further comprising: generating an RGB content image based on the YUV content image.
EE15. A device comprising: a decoder decoding an encoded image, creating a decoded clean sequence; a noise synthesis module performing the method of any one of EE1-EE14, creating a synthesized noise image; wherein the decoder is configured to combine the synthesized noise image with the decoded clean sequence, creating a rendered image for display.
EE16. The device of EE15, further comprising a modulation curve module for modulating the synthesized noise image prior to combining with the decoded clean sequence.
EE17. A computer program product comprising data encoded to perform the method of any one of EE1-EE14 when run on a processor.
EE18. A device for creating synthesized noise in an image, the device comprising: a line buffer comprising a row from the image; firmware comprising noise block patterns; a pseudo random number generator providing a random value for a pixel in the row; logic for comparing the random value with a threshold criterion; data store comprising a noise block management table; logic populating the noise block management table based on a random noise block pattern from the firmware being associated with a pixel in the row where the random value associated with the pixel meets the threshold criterion; logic computing a noise value for each pixel location in the row of the image based on the noise block management table; and logic modifying the row based on the noise value.
EE19. The device of EE18, further comprising: logic for determining a modulation curve from the image, computing a modulation factor, and applying the modulation factor to the noise value prior to modifying the row.
EE20. The device of EE18 or EE19, wherein the pseudo random noise generator generates random numbers based on the row index and a random offset value.
EE21. The device of any one of EE18-EE20, wherein the image is a luma channel image.
EE22. The device of any one of EE18-EE20, wherein the image is a chroma channel image.
EE23. The device of any one of EE18-EE22, further comprising multiple pseudo random number generators and multiple line buffers processing the image in parallel.
EE24. A decoder system comprising a decoder decoding an encoded image, creating a decoded clean sequence; a noise synthesis module comprising the device of any one of EE18-EE23, creating a synthesized noise image; wherein the decoder is configured to combine the synthesized noise image with the decoded clean sequence, creating a rendered image for display.
EE25. A method for generating metadata for a decoder, the method comprising: setting a noise category parameter; setting a block size parameter; setting a threshold parameter; and setting a modulation factor curve parameter.
EE26. The method of EE25, further comprising setting a noise variance parameter.
EE27. The method of any one of EE25 or EE26, further comprising setting a discrete cosine transform frequency range parameter.
EE28. The method of any one of EE25-EE27, further comprising setting a number of block patterns parameter.
EE29. The method of any one of EE25-EE28, further comprising setting a noise block management table entries parameter.
A number of embodiments of the disclosure have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the present disclosure. Accordingly, other embodiments are within the scope of the following claims. Any significant features of the embodiments are common to all embodiments where appropriate.
The examples set forth above are provided to those of ordinary skill in the art as a complete disclosure and description of how to make and use the embodiments of the disclosure and are not intended to limit the scope of what the inventor/inventors regard as their disclosure.
Modifications of the above-described modes for carrying out the methods and systems herein disclosed that are obvious to persons of skill in the art are intended to be within the scope of the following claims. All patents and publications mentioned in the specification are indicative of the levels of skill of those skilled in the art to which the disclosure pertains. All references cited in this disclosure are incorporated by reference to the same extent as if each reference had been incorporated by reference in its entirety individually.
It is to be understood that the disclosure is not limited to particular methods or systems, which can, of course, vary. It is also to be understood that the terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting. As used in this specification and the appended claims, the singular forms “a,” “an,” and “the” include plural referents unless the content clearly dictates otherwise. The term “plurality” includes two or more referents unless the content clearly dictates otherwise. Unless defined otherwise, all technical and scientific terms used herein have the same meaning as commonly understood by one of ordinary skill in the art to which the disclosure pertains.
Number | Date | Country | Kind |
---|---|---|---|
19218144 | Dec 2019 | EP | regional |
This application claims the benefit of priority from U.S. Provisional Patent Application No. 62/950,466, filed on 19 Dec. 2019, and EP Patent Application No. 19218144.4, filed on 19 Dec. 2019, which are hereby incorporated by reference in their entirety.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2020/066366 | 12/21/2020 | WO |
Publishing Document | Publishing Date | Country | Kind |
---|---|---|---|
WO2021/127628 | 6/24/2021 | WO | A |
Number | Name | Date | Kind |
---|---|---|---|
7889939 | Llach | Feb 2011 | B2 |
7889940 | Balram | Feb 2011 | B2 |
7945106 | Gomila | May 2011 | B2 |
8013888 | Schoner | Sep 2011 | B2 |
8023567 | Gomila | Sep 2011 | B2 |
8238613 | Boyce | Aug 2012 | B2 |
8447127 | Gomila | May 2013 | B2 |
9100647 | Balram | Aug 2015 | B1 |
9438821 | Parker | Sep 2016 | B1 |
9652867 | Webb | May 2017 | B2 |
20070058878 | Gomilla | Mar 2007 | A1 |
20080252781 | De Waele | Oct 2008 | A1 |
20090231345 | Bruls | Sep 2009 | A1 |
20140320692 | Ichikawa | Oct 2014 | A1 |
Number | Date | Country |
---|---|---|
2011213893 | Oct 2012 | AU |
3018906 | Dec 2018 | EP |
11085955 | Mar 1999 | JP |
2007504709 | Mar 2007 | JP |
2007513434 | May 2007 | JP |
2005034518 | Apr 2005 | WO |
Entry |
---|
Wikipedia: Box-Muller Transform (https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform. |
Wikipedia: Linear-feedback shift register (https://en.wikipedia.org/wiki/Linear-feedback_shift_register). |
Wikipedia: Marsaglia Polar Method (https://en.wikipedia.org/wiki/Marsaglia_polar_method). |
Number | Date | Country | |
---|---|---|---|
20230050950 A1 | Feb 2023 | US |
Number | Date | Country | |
---|---|---|---|
62950466 | Dec 2019 | US |