Patent Publication Number: US-10791343-B2

Title: Mixed noise and fine texture synthesis in lossy image compression

Description:
FIELD 
     Implementations relate to maintaining texture information in a compressed (e.g., encoded) image. 
     BACKGROUND 
     Images (e.g., photographs) typically contain sensor noise associated with the device that captures the image. While storing the image, a conventional lossy image compression technique can be used to reduce the size of data associated with the image. Using these compression techniques, the noise can be removed and the image can be stored as a noiseless image. Otherwise, a relatively large amount of memory is used to store some representation of the noise. The representations of noise that are available can be primitive in image formats, even though the noise itself can be a large amount of information. Furthermore, in some cases more than 50% of the information content in the image can be noise. Removing the noise can also cause the removal some fine textures (e.g., that are desirable to keep in the image). 
     SUMMARY 
     In a general aspect, an encoder and/or a computer implemented encoding method includes a texture module configured to determine texture data associated with texture of an image, a noise module configured to determine noise data based on the texture data, a synthesis module configured to generate spatial spectral characteristics of the noise, and combine at least one of the noise data, the texture data, and the spatial spectral characteristics of the noise based on at least one border between adjacent textures, and an encoding module configured to compress the image using an image compression codec. 
     Implementations can include one or more of the following features. For example, the texture module can separate the image into texture data and color data, the texture data being at least one of a pixel color variation as compared to surrounding pixels and a pixel intensity variation as compared to surrounding pixels, and the encoder can be configured to compress the color data. The texture data can be noise that is filtered from the image. The image can include a plurality of layers, and the texture data can be included in one of the plurality of layers. The noise data can be calculated as noise representing texture, and a windowed FFT can be applied to the noise data to generate the spatial spectral characteristics of the noise. The synthesis module can be configured to determine high frequency noise as noise data above a threshold value, cluster the high frequency noise meeting a condition into radially symmetric clusters, and assign each cluster at least one of a scalar value and a direction value. The noise data can be at least one of noise, a noise vector, an algorithm configured to generate noise, and an algorithm configured to generate a noise vector. 
     In another general aspect, a method includes receiving an image, removing noise data from the image, determining spatial spectral characteristics of the noise, modeling the spatial spectral characteristics of the noise, clustering the modeled spatial spectral characteristics of the noise into radially symmetric clusters, and generating a file including the noise data and the radially symmetric clusters based on at least one border between adjacent textures. 
     Implementations can include one or more of the following features. For example, the method can further include applying a windowed FFT to the noise data to generate the spatial spectral characteristics of the noise. The method can further include defining spatial patterns based on the radially symmetric clusters, wherein the spatial patterns represent objects associated with the image. Removing the noise can include filtering at least one of a pixel color variation as compared to surrounding pixels and a pixel intensity variation as compared to surrounding pixels from the image. 
     In yet another general aspect, an encoder and/or a computer implemented encoding method includes a re-synthesis module configured to receive mixed noise data and synthesized texture data associated with a compressed image, the mixed noise data and synthesized texture data including noise data and synthesized texture data corresponding to pixel data that is structured based on at least one border between adjacent textures, and generate texture data from the mixed noise data and synthesized texture data, a decoder module configured to decompress the compressed image using an image decompression codec, and an image generator module configured to generate an image by adding the texture data to the decompressed image. 
     Implementations can include one or more of the following features. For example, the image generator module can add the texture data to the decompressed image pixel-by-pixel. The image generator module adds the texture data to the decompressed image as an image layer. The image may not have texture characteristics on each pixel that are the same as an original image. The noise can be clustered into radially symmetric clusters, each cluster can be assigned at least one of a scalar value and a direction value, and the noise can be calculated using a weighted algorithm where each scalar value is weighted. 
     The noise can be clustered into four radially symmetric clusters, each cluster can be assigned a scalar value and a direction value, and the noise for each pixel is calculated as total=w0*noise-up-left+w1*noise-up+w2*noise-up-right+w3*noise-right, where w0, w1, w2 and w3 are preassigned weights. Generating the texture data can include a two-pass process, the mixed noise data and synthesized texture data can be processed using a first technique in a first pass, and in a second pass a portion of the texture data from the first pass can be replaced with mixed noise data and synthesized texture data processed using a second technique. Generating the texture data can include a two-pass process, the synthesized texture data can be processed using a first technique in a first pass, and in a second pass a portion of the texture data from the first pass can be replaced with noise data processed using a second technique. The synthesized texture data can include an indication of an algorithm used to re-generate a noise value. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Example implementations will become more fully understood from the detailed description given herein below and the accompanying drawings, wherein like elements are represented by like reference numerals, which are given by way of illustration only and thus are not limiting of the example implementations and wherein: 
         FIG. 1  illustrates a block diagram of data flow according to an example implementation. 
         FIG. 2  illustrates a block diagram of an encoder/decoder system data flow according to an example implementation. 
         FIG. 3  illustrates a portion of an image with different texture regions. 
         FIG. 4  illustrates a portion of the image illustrated in  FIG. 3  with a block grid overlaid on the portion of the image. 
         FIG. 5  illustrates a method for synthesizing noise and texture associated with an image according to at least one example implementation. 
         FIG. 6  illustrates another method for synthesizing noise and texture associated with an image according to at least one example implementation. 
         FIG. 7  illustrates a method for reconstructing an image using synthesized noise and texture according to at least one example implementation. 
         FIG. 8  illustrates block diagram of an image encoder system according to at least one example implementation. 
         FIG. 9  illustrates block diagram of an image decoder system according to at least one example implementation. 
         FIG. 10  shows an example of a computer device and a mobile computer device according to at least one example implementation. 
     
    
    
     It should be noted that these Figures are intended to illustrate the general characteristics of methods, structure and/or materials utilized in certain example implementations and to supplement the written description provided below. These drawings are not, however, to scale and may not precisely reflect the precise structural or performance characteristics of any given implementation, and should not be interpreted as defining or limiting the range of values or properties encompassed by example implementations. For example, the positioning of layers, regions and/or structural elements may be reduced or exaggerated for clarity. The use of similar or identical reference numbers in the various drawings is intended to indicate the presence of a similar or identical element or feature. 
     DETAILED DESCRIPTION OF THE IMPLEMENTATIONS 
     While example implementations may include various modifications and alternative forms, implementations thereof are shown by way of example in the drawings and will herein be described in detail. It should be understood, however, that there is no intent to limit example implementations to the particular forms disclosed, but on the contrary, example implementations are to cover all modifications, equivalents, and alternatives falling within the scope of the claims. Like numbers refer to like elements throughout the description of the figures. 
     In a noise removal technique, the spatial spectral characteristics of the noise can be modeled by a windowed Fast Fourier Transform (FFT). The highest frequency noise can be clustered (e.g., bucketed, organized, and the like) into radially symmetric clusters (e.g., buckets) that contain directional features. For example, the noise can be clustered using four directions: up-left, up, up-right, right. The opposite directions are redundant for a texture direction. Spatial patterns then can be defined that synthesize the noise for these directions. The total noise can be calculated as, for example, total noise=w0*noise-up-left+w1*noise-up+w2*noise-up-right+w3*noise-right. In example implementations, zero or positive values for the weights (w0, w1, w2 and w3) can be chosen or assigned. 
     Furthermore, the noise can be re-synthesized from the directionally biased multiple noise sources. When the noise sources are added together, the noise sources create non-directional noise. In addition, the noise patterns can be optimized so that for any weighting, a goal statistic can satisfy some constraint. Example constraints can include a noise pattern that does not have a bright (or dark) spot in the same place so as to avoid a bright (or dark) spot that gets amplified by every weight. Furthermore, constraints can be added so that specific clusters or visual features do not occur, to prevent local clusters from emerging. Furthermore, the total level of noise can be constrained to correlate to the intensity level. 
     Typically, in digital photography, photons detected by the camera&#39;s sensors are gamma compressed. This can change the properties of the noise in a way that at low intensities the sensor noise gets numerically higher values. In example implementations, the image compression system can model this correlation. This allows controlling the noise synthesis using a much lower spatial frequency control field, and locally modulating the noise synthesis through intensity. Because the noise synthesis has lower spatial frequencies, less information is stored (e.g., it is stored with larger pixels). Having larger pixels allows use of vectors (instead of scalars) to describe the noise, which allows for specifying directionality and other texture-like features of the noise without using significantly more memory to store a compressed image. 
       FIG. 1  illustrates a block diagram of data flow according to an example implementation. As shown in  FIG. 1 , a texture block  110  includes data associated with texture of an image (e.g., filtered noise, a texture layer of an image, a texture map for the image and/or the like) or texture data. In a noise block  115 , the texture data and/or a portion of the texture data is converted to noise data and/or an algorithm representing noise. Then, in a mixed noise and texture block  120 , data representing some noise (and/or an algorithm representing noise) and texture is generated. In an example implementation, the mixed noise and texture block  120  can cluster noise into radially symmetric clusters that use vectors to describe the noise. 
     The texture block  110 , the noise block  115  and the mixed noise and texture block  120  can be included in and/or be implemented in an encoder  105 . The output of the mixed noise and texture block  120  can be stored with encoded data representing a color portion or color layer of the image. 
     The output of the mixed noise and texture block  120  (e.g., as read from a data storage device) can be used as input to a noise re-synthesis block  130 . The noise re-synthesis block  130  can generate noise data from mixed noise and synthesized data. The re-synthesis block  130  can use a weighted algorithm with the vectors used to describe noise as an input. The weighted algorithm can generate non-directional noise. Then, in a texture block  135 , the texture data (e.g., a texture layer of an image, a texture map for the image and/or the like) for the image can be regenerated from the noise data. The noise re-synthesis block  130  and the texture block  135  can be included in and/or be implemented in a decoder  125 . 
       FIG. 2  illustrates a block diagram of an encoder/decoder system data flow according to an example implementation. As shown in  FIG. 2 . The encoder/decoder system includes an encoder  205 , a data storage  245  and a decoder  250 . The encoder  205  includes an image deconstruct block  215 , a color encoder block  225 , a texture encoder block  235  and a file generator block  240 . 
     The image deconstruct block  215  is configured to separate image  210  into color data  220  and texture data  230 . Color data  220  can be typical pixel color data associated with the image  210 . The color encoder block  225  can be configured to compress the color data  220  using a compression standard (e.g., JPEG, GIF, BMP, PNG, and the like). Texture can be seen as pixel color or intensity variations as compared to surrounding pixels. However, noise (e.g., noise from camera sensors) can have the same characteristics as texture (e.g., seen as pixel color or intensity variations). Therefore, the image deconstruct block  215  can separate the texture data as if the texture is noise. In addition, the noise (e.g., the noise representing texture and other noise) is kept as texture data  230  rather than discarded (as noise typically would be). Accordingly, texture data  230  can include texture data, noise data and/or both. 
     Furthermore, typical noise reduction techniques remove noise (e.g., as a scalar value) without considering directional or spatial details (because the noise data is going to be discarded). However, in example implementations, directional and spatial information associated with each noise data point (e.g., the noise associated with each pixel) is kept. 
     In an example implementation, the image deconstruct block  215  can filter noise from the image  210 . In an implementation where only the resultant filtered image would exist, the resultant filtered image can be subtracted from image  210  to calculate the noise. This noise can be the texture data  230  in the data flow. The resultant filtered image can be the color data  220  in the data flow. 
     In another example, the image  210  can include a plurality of layers. One of the layers can be, for example, a texture layer added using an image editing tool. The image deconstruct block  215  can separate the texture layer from the color layer. The texture layer can be a texture map. 
     The texture encoder  235  can use texture data  230  as input data. The texture data  230  can be data points calculated as noise representing texture and/or texture data points (e.g., a texture map) read as noise or converted to noise. Furthermore, in the texture encoder  235 , a windowed FFT can be applied to the noise (e.g., scalar values corresponding to the noise) to generate (e.g., model) the spatial spectral characteristics of the noise. 
     High frequency noise (e.g., transformed noise within the range of the window, transformed noise above a threshold value, transformed noise meeting a condition, and/or the like) can be clustered into radially symmetric clusters, which each cluster being assigned one or more identical value for a parameter characterizing the noise. For example, each cluster can be assigned a same direction value (e.g., up, down, left, right) and/or each cluster can be assigned a same scalar value. In other words, each data point of the transformed noise will be a vector (having a scalar value and a direction), and data points having values within a range can be assigned an identical value (e.g., clustered, bucketed, quantized and the like). In addition, each cluster can be assigned an algorithm configured to regenerate the vector representing the noise associated with the cluster. As described in more detail below, texture transitions can be accounted for in the texture encoder block  235 . 
       FIG. 3  illustrates a portion of an image  300 . The image  300  includes a plurality of texture regions  305 - 1 ,  305 - 2 ,  305 - 3 ,  305 - 4 ,  305 - 6 ,  305 - 7  each having a texture  310 - 1 ,  310 - 2 ,  310 - 3 ,  310 - 4 ,  310 - 6 ,  310 - 7 . The texture  310 - 1 ,  310 - 2 ,  310 - 3 ,  310 - 4 ,  310 - 6 ,  310 - 7  can be represented as noise. Portion  320 - 1 ,  320 - 2  is a blow-up of a portion of texture region  305 - 3  and a portion of texture region  305 - 4 . Texture region  305 - 3  and texture region  305 - 4  (and similar regions) can be referenced as adjacent texture regions. Typically, adjacent texture regions can have different textures (e.g., texture  325 - 1  can be different than texture  330 - 1 ). The different textures can be represented by different noise. The different noise can have different vector values or value ranges. For example, the direction (up, down, left, right) of the noise associated with texture region  305 - 3  can be different than the direction of texture region  305 - 4 . 
     Portion  320 - 1  can be viewed as including an original and desired reconstructed adjacent textures  325 - 1  and  330 - 1 . Portion  320 - 2  can be viewed as including undesired reconstructed adjacent textures  325 - 2  and  330 - 2 . For example, portion  320 - 2  includes anomaly texture  335 . The anomaly texture  325  can occur during reconstruction of the image  300  due to summing noise vectors. For example, the noise vectors along a border between adjacent textures  325 - 2  and  330 - 2  could include vectors with enough direction vectors in one direction (e.g., left) such that the vectors add to generate the anomaly texture  335 . Example implementations can prevent the generation of the anomaly texture  335 . 
       FIG. 4  illustrates a portion  315  of the image  300  with a block grid  405  overlaid on the portion  315 . As shown in  FIG. 4 , each texture region  305 - 1 ,  305 - 2 ,  305 - 3 ,  305 - 4 ,  305 - 6 ,  305 - 7  having a texture  310 - 1 ,  310 - 2 ,  310 - 3 ,  310 - 4 ,  310 - 6 ,  310 - 7  also have a border  410 - 1 ,  410 - 2 ,  410 - 3 ,  410 - 4 ,  410 - 6 ,  410 - 7  between adjacent textures. Each block of the block grid  405  can represent a position of a pixel or group of pixels. Some blocks of the block grid  405  can include one texture. Some blocks of the block grid  405  can include more than one texture. As shown, the blocks of the block grid  405  that include more than one texture can be along one or more of the borders  410 - 1 ,  410 - 2 ,  410 - 3 ,  410 - 4 ,  410 - 6 ,  410 - 7 . 
     In an example implementation each data point (e.g., representing texture of a pixel) in each block of the block grid  405  the texture can be represented by noise, a noise vector, an algorithm configured to generate noise, an algorithm configured to generate a noise vector and/or the like. 
     For example, a noise vector can be generated using a windowed Fast Fourier Transform (FFT). The highest frequency noise can be clustered (bucketed, organized, and the like) into radially symmetric clusters (e.g., buckets) that contain directional features as described above. 
     Alternately, or in addition to, the blocks of the block grid  405  that include more than one texture can be left as a texture or noise representing the texture. Alternately, or in addition to, the blocks of the block grid  405  that are close to a border (with or without considering a number of textures included in the block) can be left as a texture or noise representing the texture. Alternately, or in addition to, the blocks of the block grid  405  can be assigned a value indicating an algorithm that can be used to re-generate a noise value. In some implementations, multiple techniques are used. For example, a data point-by-data point decision can be used to determine how to process the data. In another example, a two-pass process can be used where the data is processed using one technique in a first pass and in a second pass some of the data from the first pass is replaced with data processed using a second technique. The end result can be mixed noise and texture data 
     Returning to  FIG. 2 , file generator  240  can be configured to generate a file including the color encoder  225  output (e.g., a compressed image) and the texture encoder  235  output (e.g., mixed noise &amp; synthesized texture data). The file generator  240  can generate a single file or multiple associated files. The file can be a data set that can be communicated (e.g., a message, a packet and the like) or stored. The file can be stored in data storage  245 . 
     As shown in  FIG. 2 , the decoder  250  includes a file deconstruct block  255 , a color decoder  260 , a color block  265 , a texture decoder  270 , a texture block  275  and an image construct block  280 . The file deconstruct block  255  can be configured to read a file from the data storage  245 . The file can include data representing a compressed image and associated texture and/or noise data. The file deconstruct block  255  can be further configured to separate the compressed image from the texture and/or noise data. The compressed image is input to the color decoder  260 . The color decoder  260  can be configured to decompress (e.g., decode, reconstruct, and the like) the compressed image using a compression standard (e.g., JPEG, GIF, BMP, PNG, and the like). The decompressed image is shown as color block  265 . 
     The texture and/or noise data is input to the texture decoder  270 . The texture decoder  270  can be configured to generate texture  275  data for each pixel in the color block  265  based on the texture and/or noise data. The texture  275  data can be added to the color  265  data in the image construct block  280  to generate image  285 . Image  285  is a reconstructed representation of image  210  including texture originally included in image  210 . 
     The texture decoder  270  can be configured to re-synthesize noise from directionally biased multiple noise sources. When the noise sources are added together, the noise sources create non-directional noise. In addition, the noise patterns can be optimized so that for any weighting, a goal statistic can satisfy some constraint. Example constraints can include that every noise pattern should not have a bright (or dark) spot in the same place so that the bright (or dark) spot gets amplified by every weight. Furthermore, constraints can include a requirement that specific clusters or visual features should not occur, so local clusters can be prevented from emerging and a constraint that he total level of noise should correlate to the intensity level. 
     The texture decoder  270  can be further configured to build texture data that can be added to color data in order to reconstruct an image (e.g., image  210 ) that had textured features before being compressed. In an example implementation, the texture can be regenerated or resynthesized as noise. For example, the reconstructed image (e.g., image  285 ) does not have to have the same texture characteristics on each pixel as the original image (e.g., image  210 ). In other words, the texture can be noise (e.g., random intensity or color variations) associated with each pixel in the original image (e.g., image  210 ). Therefore, noise that closely resembles the noise of the original image can be added to the reconstructed image (e.g., image  285 ). 
     For example, fine high frequency textures such as hair, cloth, tree leaves, waves on a lake, and/or the like can be represented as noise. The directionality of the high frequency textures can be modeled and reconstructed without visual artefacts (e.g., visual inconsistencies like anomaly texture  335 ) in a reconstructed image. In other words, reconstructed tree leaves in an image can have a visually consistent texture without an adjacent background (e.g., sky or grass) having tree leaf textures run into the texture of the adjacent background. 
     Accordingly, the texture decoder  270  can generate the texture data using algorithms, transmitted texture data, transmitted noise data, noise, noise vectors and the like. In some implementations noise vector data can be added together using a weighted algorithm (as discussed above) to generate non-directional (scalar) noise. In some implementations an algorithm can be selected based on an indication associated with a block of data, a cluster of data, bucketed data and/or the like. Noise or texture data can be the same data as the original image data along a border (e.g., border  410 - 1 ,  410 - 2 , and the like) between adjacent textures. In some implementations an inverse-FFT of noise data can be performed after the texture data. 
       FIGS. 5-7  are flowcharts of methods according to example implementations. The steps described with regard to  FIGS. 5-7  may be performed due to the execution of software code stored in a memory (e.g., at least one memory  810 ,  910 ) associated with an apparatus (e.g., as shown in  FIGS. 8, 9 and 10  (described below)) and executed by at least one processor (e.g., at least one processor  805 ,  905 ) associated with the apparatus. However, alternative implementations are contemplated such as a system embodied as a special purpose processor. Although the steps described below are described as being executed by a processor, the steps are not necessarily executed by a same processor. In other words, at least one processor may execute the steps described below with regard to  FIGS. 5-7 . 
       FIG. 5  illustrates a method for synthesizing mixed noise and texture associated with an image according to at least one example implementation. As shown in  FIG. 5 , in step S 505  an image is received. For example, the image can be image data captured by a camera, the image can be computer generated image data, the image can be image data captured by a camera that is subsequently modified using a computer executed program configured to manipulate (e.g., filter) the image data, and/or the like. The image can be stored remotely received at a device implementing this method. The device implementing this method can be a camera or coupled to a camera such that this method is implemented subsequent (e.g., directly after) capturing the image. 
     In step S 510  noise is removed from the image. For example, typical noise reduction techniques remove noise (e.g., as a scalar value) without considering directional or spatial details (e.g., because the noise data is going to be discarded). However, in example implementations directional and/or spatial information associated with each noise data point (e.g., the noise associated with each pixel) is kept. This can be a single operation or in an implementation where the noise is filtered out of the image and only the resultant filtered image would exist, the resultant filtered image can be subtracted from the image to calculate the noise. 
     In step S 515  spatial characteristics of the noise is determined. For example, pixel color (e.g., RGB, YUV and the like) values sharpness, tone scale, luminance, graininess and/or intensity can be determined. In step S 520  the spatial characteristics of the noise is modeled. The spatial characteristics of an image can be described by signal and noise power distributions (e.g., of the color and/or intensity) for the image. Often the spatial characteristics of devices can be mid-tone. However, fine high frequency textures such as hair, cloth, tree leaves, waves on a lake, and/or the like can be represented as noise as well. Therefore, in example implementations the high frequency noise representing spatial characteristics can be modeled. For example, the noises&#39; spatial spectral characteristics can be modeled by a windowed Fast Fourier Transform (FFT). 
     In step S 525  the modeled spatial characteristics of the noise is clustered. For example, the highest frequency noise can be clustered (bucketed, organized, and the like) into radially symmetric clusters (e.g., buckets) that contain directional features. For example, using four directions: up-left, up, up-right, right and the like. In an example implementation, spatial patterns can then be defined that create the noise for these directions. The spatial patterns can represent objects (e.g., hair, cloth, tree leaves, waves on a lake, and/or the like) in the image. The spatial patterns can be associated with a position in the image. The spatial patterns can be algorithms or mathematical formulas that can be used to recreate the spatial characteristics and/or the noise. The spatial patterns can be stored in association with individual pixels and/or in association with group of pixels. The stored spatial patterns can be referred to as synthesized noise and texture associated with an image. 
       FIG. 6  illustrates another method for synthesizing mixed noise and texture associated with an image according to at least one example implementation. As shown in  FIG. 6 , in step S 605  an image is received. For example, the image can be image data captured by a camera, the image can be computer generated image data, the image can be image data captured by a camera that is subsequently modified using a computer executed program configured to manipulate (e.g., filter) the image data, and/or the like. The image can be stored remotely received at a device implementing this method. The device implementing this method can be a camera or coupled to a camera such that this method is implemented subsequent (e.g., directly after) capturing the image. 
     In step S 610  a texture map is determined from the image. For example, the image  210  can include a plurality of layers. One of the layers can be, for example, a texture layer added using an image editing tool. The texture layer can be separated from other layers (e.g., a color layer) of the image. The texture layer can be a texture map. 
     In step S 615  transitions associated with the texture map are determined. For example, transitions between texture regions can be determined. Referring to  FIG. 4 , a texture region  305 - 1  to  305 - 7  can have a texture  310 - 1  to  310 - 7  and a border  410 - 1  to  410 - 7  between adjacent textures. The transitions between texture regions can be at the border  410 - 1  to  410 - 7  between adjacent textures. 
     In step S 620  a noise map is generated from the texture map. For example, as discussed above, texture can be represented as noise. Therefore, some ratio (e.g., 1:1, 1:2, 2:1) can be used to convert texture values to noise values. 
     In step S 625  a mixed noise map and texture map is synthesized (or generated). For example, a texture region  305 - 1  to  305 - 7  can be assigned a noise value or noise value range based on the noise values. Furthermore, portions of the texture region  305 - 1  to  305 - 7  close to the transitions associated with the texture map can be left as or assigned the original texture value. 
     Combinations and variations of the methods described with regard to  FIG. 6  and  FIG. 7  are within the scope of this disclosure. For example, step S 510  can be replaced with steps S 610  and S 620 . Alternatively, step S 620  can be replaced by steps S 510 -S 525  and the noise in step S 625  can be the spatial characteristics of the noise. 
       FIG. 7  illustrates a method for reconstructing an image using synthesized mixed noise and texture according to at least one example implementation. As shown in  FIG. 7 , in step S 705  a mixed noise and texture is received. For example, the synthesized mixed noise and texture is can be the mixed noise and texture synthesized or generated in  FIGS. 6, 7  and/or combinations and variations thereof. The mixed noise and texture can be received from a data storage coupled to a device implementing the method of  FIG. 7 . 
     In step S 710  a texture data and/or a texture map is generated from the mixed noise and texture. For example, the noise can be re-synthesized from the directionally biased multiple noise sources. When the noise sources are added together, the noise sources create non-directional noise. In addition, the noise patterns can be optimized so that for any weighting, a goal statistic can satisfy some constraint. Example constraints can be that every noise pattern should not have a bright (or dark) spot in the same place so that the bright (or dark) spot gets amplified by every weight. In an example implementation, the noise can be calculated as: total=w0*noise-up-left+w1*noise-up+w2*noise-up-right+w3*noise-right. In example implementations, zero or positive values for the weights (w0, w1, w2 and w3) can be chosen or assigned. 
     In step S 715  an image is reconstructed using the texture data and/or texture map. For example, the texture data can be added to color data in the image construct to generate an image. Alternatively (or in addition) the texture map can be added as a layer to an image. The image is a reconstructed representation of a previously encoded image (e.g., image  210 ) including texture originally included in the previously encoded image. 
       FIG. 8  illustrates block diagram of an image encoder system according to at least one example implementation. As shown in  FIG. 8 , the image encoder system  800  includes the at least one processor  805 , at least one memory  810 , an encoder  820 , a texture module  825 , a noise module  830 , a synthesis module  835  and a standard encoding module  840 . The at least one processor  805  and the at least one memory  810  are communicatively coupled via bus  815 . 
     The at least one processor  805  may be utilized to execute instructions stored on the at least one memory  810 , so as to thereby implement the various features and functions described herein, or additional or alternative features and functions. The at least one processor  805  and the at least one memory  810  may be utilized for various other purposes. In particular, the at least one memory  810  can represent an example of various types of memory and related hardware and software which might be used to implement any one of the modules described herein. 
     The at least one memory  810  may be configured to store data and/or information associated with the image encoder system  800 . For example, the at least one memory  810  may be configured to store codecs associated with encoding images. The at least one memory  810  may be a shared resource. The encoder  820  can be configured to compress an image using a compression standard (e.g., JPEG, GIF, BMP, PNG, and the like). Therefore, the encoder  820  includes the standard encoding module  840  which is configured to encode (e.g., compress) an image (e.g., color data, RGB, YUV and the like) using an image compression codec as defined by the compression standard. 
     The encoder  820  can be further configured to generate (or synthesize) texture and noise data and/or a mixture of texture and noise data. The texture and noise data is then associated with the encoded (e.g., compressed) image. Therefore, the encoder  820  includes the texture module  825 , the noise module  830  and the synthesis module  835 . The texture module  825  can be configured determine, remove, filter and the like data associated with texture of an image (e.g., filtered noise, a texture layer of an image, a texture map for the image and/or the like). This data or texture data can be stored in the texture module  825 , in association with the texture module  825  and/or in the at least one memory  810 . The noise module  830  can be configured determine, remove, filter and the like data associated with noise of an image (e.g., filtered noise or the like). This data or noise data can be stored in the noise module  830 , in association with the noise module  830  and/or in the at least one memory  810 . 
     As discussed above, in example implementations noise (e.g., noise from camera sensors) can have the same characteristics as texture (e.g., seen as pixel color or intensity variations). Therefore, the texture data can be used as if the texture is noise (e.g., converted to noise, treated as noise, and/or the like). The synthesis module  835  can be configured to generate (e.g., model) the spatial spectral characteristics of the noise, combine (e.g., combine in a file) noise data, texture data, the spatial spectral characteristics of the noise and/or representations thereof. Generating and synthesizing these types of data are described in more detail above. 
       FIG. 9  illustrates block diagram of an image decoder system according to at least one example implementation. As shown in  FIG. 9 , the image encoder system  900  includes the at least one processor  905 , at least one memory  910 , a decoder  920 , a resynthesis module  925 , a standard decoding module  930  and an image generator module  935 . The at least one processor  905  and the at least one memory  910  are communicatively coupled via bus  915 . 
     The at least one processor  905  may be utilized to execute instructions stored on the at least one memory  910 , so as to thereby implement the various features and functions described herein, or additional or alternative features and functions. The at least one processor  905  and the at least one memory  910  may be utilized for various other purposes. In particular, the at least one memory  910  can represent an example of various types of memory and related hardware and software which might be used to implement any one of the modules described herein. 
     The at least one memory  910  may be configured to store data and/or information associated with the image encoder system  900 . For example, the at least one memory  910  may be configured to store codecs associated with encoding images. The at least one memory  910  may be a shared resource. The decoder  920  can be configured to decompress an image using a compression standard (e.g., JPEG, GIF, BMP, PNG, and the like). Therefore, the decoder  920  includes the standard decoding module  930  which is configured to decode (e.g., decompress) a compressed image (e.g., color data, RGB, YUV and the like) using an image decompression codec as defined by the compression standard. 
     The decoder  920  can be further configured to reconstruct an image using mixed (or synthesized) noise and texture data. Therefore, the decoder  920  includes the re-synthesis module  925  and the image generator module  935 . The re-synthesis module  925  can be configured to generate texture (e.g., as noise, a texture map and/or the like) from the mixed noise and synthesized texture data. The image generator module  935  can be configured to add (e.g., pixel-by-pixel, as an image layer and/or the like) the texture to a decoded image. 
     As discussed above, a relatively large amount of memory is used to store some representation of noise within an image. The representations of noise that are available can be primitive in image formats, even though the noise itself can be a large amount of information. Encoding this noise can be computer resource expensive (e.g., use a significant amount of memory, use a significant amount of processing cycles, increase processing time, use a significant amount of communication bandwidth, and the like) which is undesirable. Further, removing the noise can also cause the removal some fine textures (e.g., that are desirable to keep in the image). Accordingly, the above described system and method improves computer technology by reducing computer resources while encoding and decoding an image. Further, the above described system and method improves computer technology by retaining fine textures in images without excessive utilization of computer and communication resources. 
       FIG. 10  shows an example of a computer device  1000  and a mobile computer device  1050 , which may be used with the techniques described here. Computing device  1000  is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers. Computing device  1050  is intended to represent various forms of mobile devices, such as personal digital assistants, cellular telephones, smart phones, and other similar computing devices. The components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations of the inventions described and/or claimed in this document. 
     Computing device  1000  includes a processor  1002 , memory  1004 , a storage device  1006 , a high-speed interface  1008  connecting to memory  1004  and high-speed expansion ports  1010 , and a low speed interface  1012  connecting to low speed bus  1014  and storage device  1006 . Each of the components  1002 ,  1004 ,  1006 ,  1008 ,  1010 , and  1012 , are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate. The processor  1002  can process instructions for execution within the computing device  1000 , including instructions stored in the memory  1004  or on the storage device  1006  to display graphical information for a GUI on an external input/output device, such as display  1016  coupled to high speed interface  1008 . In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices  1000  may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system). 
     The memory  1004  stores information within the computing device  1000 . In one implementation, the memory  1004  is a volatile memory unit or units. In another implementation, the memory  1004  is a non-volatile memory unit or units. The memory  1004  may also be another form of computer-readable medium, such as a magnetic or optical disk. 
     The storage device  1006  is capable of providing mass storage for the computing device  1000 . In one implementation, the storage device  1006  may be or contain a computer-readable medium, such as a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly embodied in an information carrier. The computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory  1004 , the storage device  1006 , or memory on processor  1002 . 
     The high speed controller  1008  manages bandwidth-intensive operations for the computing device  1000 , while the low speed controller  1012  manages lower bandwidth-intensive operations. Such allocation of functions is exemplary only. In one implementation, the high-speed controller  1008  is coupled to memory  1004 , display  1016  (e.g., through a graphics processor or accelerator), and to high-speed expansion ports  1010 , which may accept various expansion cards (not shown). In the implementation, low-speed controller  1012  is coupled to storage device  1006  and low-speed expansion port  1014 . The low-speed expansion port, which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter. 
     The computing device  1000  may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server  1020 , or multiple times in a group of such servers. It may also be implemented as part of a rack server system  1024 . In addition, it may be implemented in a personal computer such as a laptop computer  1022 . Alternatively, components from computing device  1000  may be combined with other components in a mobile device (not shown), such as device  1050 . Each of such devices may contain one or more of computing device  1000 ,  1050 , and an entire system may be made up of multiple computing devices  1000 ,  1050  communicating with each other. 
     Computing device  1050  includes a processor  1052 , memory  1064 , an input/output device such as a display  1054 , a communication interface  1066 , and a transceiver  1068 , among other components. The device  1050  may also be provided with a storage device, such as a microdrive or other device, to provide additional storage. Each of the components  1050 ,  1052 ,  1064 ,  1054 ,  1066 , and  1068 , are interconnected using various buses, and several of the components may be mounted on a common motherboard or in other manners as appropriate. 
     The processor  1052  can execute instructions within the computing device  1050 , including instructions stored in the memory  1064 . The processor may be implemented as a chipset of chips that include separate and multiple analog and digital processors. The processor may provide, for example, for coordination of the other components of the device  1050 , such as control of user interfaces, applications run by device  1050 , and wireless communication by device  1050 . 
     Processor  1052  may communicate with a user through control interface  1058  and display interface  1056  coupled to a display  1054 . The display  1054  may be, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. The display interface  1056  may comprise appropriate circuitry for driving the display  1054  to present graphical and other information to a user. The control interface  1058  may receive commands from a user and convert them for submission to the processor  1052 . In addition, an external interface  1062  may be provide in communication with processor  1052 , to enable near area communication of device  1050  with other devices. External interface  1062  may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used. 
     The memory  1064  stores information within the computing device  1050 . The memory  1064  can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. Expansion memory  1074  may also be provided and connected to device  1050  through expansion interface  1072 , which may include, for example, a SIMM (Single In Line Memory Module) card interface. Such expansion memory  1074  may provide extra storage space for device  1050 , or may also store applications or other information for device  1050 . Specifically, expansion memory  1074  may include instructions to carry out or supplement the processes described above, and may include secure information also. Thus, for example, expansion memory  1074  may be provide as a security module for device  1050 , and may be programmed with instructions that permit secure use of device  1050 . In addition, secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a non-hackable manner. 
     The memory may include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory  1064 , expansion memory  1074 , or memory on processor  1052 , that includes data that may be received, for example, over transceiver  1068  or external interface  1062 . 
     Device  1050  may communicate wirelessly through communication interface  1066 , which may include digital signal processing circuitry where necessary. Communication interface  1066  may provide for communications under various modes or protocols, such as GSM voice calls, SMS, EMS, or MMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others. Such communication may occur, for example, through radio-frequency transceiver  1068 . In addition, short-range communication may occur, such as using a Bluetooth, Wi-Fi, or other such transceiver (not shown). In addition, GPS (Global Positioning System) receiver module  1070  may provide additional navigation- and location-related wireless data to device  1050 , which may be used as appropriate by applications running on device  1050 . 
     Device  1050  may also communicate audibly using audio codec  1060 , which may receive spoken information from a user and convert it to usable digital information. Audio codec  1060  may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of device  1050 . Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device  1050 . 
     The computing device  1050  may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a cellular telephone  1080 . It may also be implemented as part of a smart phone  1082 , personal digital assistant, or other similar mobile device. 
     Various implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device. Various implementations of the systems and techniques described here can be realized as and/or generally be referred to herein as a circuit, a module, a block, or a system that can combine software and hardware aspects. For example, a module may include the functions/acts/computer program instructions executing on a processor (e.g., a processor formed on a silicon substrate, a GaAs substrate, and the like) or some other programmable data processing apparatus. 
     Some of the above example implementations are described as processes or methods depicted as flowcharts. Although the flowcharts describe the operations as sequential processes, many of the operations may be performed in parallel, concurrently or simultaneously. In addition, the order of operations may be re-arranged. The processes may be terminated when their operations are completed, but may also have additional steps not included in the figure. The processes may correspond to methods, functions, procedures, subroutines, subprograms, etc. 
     Methods discussed above, some of which are illustrated by the flow charts, may be implemented by hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware or microcode, the program code or code segments to perform the necessary tasks may be stored in a machine or computer readable medium such as a storage medium. A processor(s) may perform the necessary tasks. 
     Specific structural and functional details disclosed herein are merely representative for purposes of describing example implementations. Example implementations, however, be embodied in many alternate forms and should not be construed as limited to only the implementations set forth herein. 
     It will be understood that, although the terms first, second, etc. may be used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element from another. For example, a first element could be termed a second element, and, similarly, a second element could be termed a first element, without departing from the scope of example implementations. As used herein, the term and/or includes any and all combinations of one or more of the associated listed items. 
     It will be understood that when an element is referred to as being connected or coupled to another element, it can be directly connected or coupled to the other element or intervening elements may be present. In contrast, when an element is referred to as being directly connected or directly coupled to another element, there are no intervening elements present. Other words used to describe the relationship between elements should be interpreted in a like fashion (e.g., between versus directly between, adjacent versus directly adjacent, etc.). 
     The terminology used herein is for the purpose of describing particular implementations only and is not intended to be limiting of example implementations. As used herein, the singular forms a, an and the are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms comprises, comprising, includes and/or including, when used herein, specify the presence of stated features, integers, steps, operations, elements and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components and/or groups thereof. 
     It should also be noted that in some alternative implementations, the functions/acts noted may occur out of the order noted in the figures. For example, two figures shown in succession may in fact be executed concurrently or may sometimes be executed in the reverse order, depending upon the functionality/acts involved. 
     Unless otherwise defined, all terms (including technical and scientific terms) used herein have the same meaning as commonly understood by one of ordinary skill in the art to which example implementations belong. It will be further understood that terms, e.g., those defined in commonly used dictionaries, should be interpreted as having a meaning that is consistent with their meaning in the context of the relevant art and will not be interpreted in an idealized or overly formal sense unless expressly so defined herein. 
     Portions of the above example implementations and corresponding detailed description are presented in terms of software, or algorithms and symbolic representations of operation on data bits within a computer memory. These descriptions and representations are the ones by which those of ordinary skill in the art effectively convey the substance of their work to others of ordinary skill in the art. An algorithm, as the term is used here, and as it is used generally, is conceived to be a self-consistent sequence of steps leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of optical, electrical, or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. 
     In the above illustrative implementations, reference to acts and symbolic representations of operations (e.g., in the form of flowcharts) that may be implemented as program modules or functional processes include routines, programs, objects, components, data structures, etc., that perform particular tasks or implement particular abstract data types and may be described and/or implemented using existing hardware at existing structural elements. Such existing hardware may include one or more Central Processing Units (CPUs), digital signal processors (DSPs), application-specific-integrated-circuits, field programmable gate arrays (FPGAs) computers or the like. 
     It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise, or as is apparent from the discussion, terms such as processing or computing or calculating or determining of displaying or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical, electronic quantities within the computer system&#39;s registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices. 
     Note also that the software implemented aspects of the example implementations are typically encoded on some form of non-transitory program storage medium or implemented over some type of transmission medium. The program storage medium may be magnetic (e.g., a floppy disk or a hard drive) or optical (e.g., a compact disk read only memory, or CD ROM), and may be read only or random access. Similarly, the transmission medium may be twisted wire pairs, coaxial cable, optical fiber, or some other suitable transmission medium known to the art. The example implementations not limited by these aspects of any given implementation. 
     Lastly, it should also be noted that whilst the accompanying claims set out particular combinations of features described herein, the scope of the present disclosure is not limited to the particular combinations hereafter claimed, but instead extends to encompass any combination of features or implementations herein disclosed irrespective of whether or not that particular combination has been specifically enumerated in the accompanying claims at this time.