A method for reading a symbol, the method comprising: • acquiring (302; 1402) a raw image of a symbol, wherein each pixel of the raw image has a value having a raw bit depth; • identifying (304; 1404) a region-of-interest of the raw image; • determining (306, 308; 1406, 1408) local pixel neighborhood information for at least one raw pixel in the region-of-interest based on an attribute of the symbol in the raw image, wherein the attribute comprises one or more of a minimum module size, a maximum module size, a module size range, a feature size range, a symbol width range, or a symbol height range, wherein the local pixel neighborhood information identifies one or more raw pixels near the at least one raw pixel; • determining a local mapping function (310; 1410) for the at least one raw pixel that maps an intensity value of the at least one raw pixel to an intensity value of at least one mapped pixel with a mapped bit depth that is smaller than the raw bit depth associated with the raw image, wherein the local mapping function is based on: an intensity value of a set of raw pixels near the at least one raw pixel within the local pixel neighborhood information; and at least one parameter determined based on an average intensity of the present or a previous raw image or the present or a previous region-of-interest; • computing (312; 1412) a mapped image for the region-of-interest, comprising determining the intensity value of the at least one mapped pixel in the mapped image by applying the local mapping function to the intensity value of the at least one raw pixel in the raw image to generate the intensity value of the at least one mapped pixel; and • decoding the symbol using the mapped image. • acquiring (302; 1402) a raw image of a symbol, wherein each pixel of the raw image has a value having a raw bit depth; • identifying (304; 1404) a region-of-interest of the raw image; • determining (306, 308; 1406, 1408) local pixel neighborhood information for at least one raw pixel in the region-of-interest based on an attribute of the symbol in the raw image, wherein the attribute comprises one or more of a minimum module size, a maximum module size, a module size range, a feature size range, a symbol width range, or a symbol height range, wherein the local pixel neighborhood information identifies one or more raw pixels near the at least one raw pixel; • determining a local mapping function (310; 1410) for the at least one raw pixel that maps an intensity value of the at least one raw pixel to an intensity value of at least one mapped pixel with a mapped bit depth that is smaller than the raw bit depth associated with the raw image, wherein the local mapping function is based on: an intensity value of a set of raw pixels near the at least one raw pixel within the local pixel neighborhood information; and at least one parameter determined based on an average intensity of the present or a previous raw image or the present or a previous region-of-interest; an intensity value of a set of raw pixels near the at least one raw pixel within the local pixel neighborhood information; and at least one parameter determined based on an average intensity of the present or a previous raw image or the present or a previous region-of-interest; • computing (312; 1412) a mapped image for the region-of-interest, comprising determining the intensity value of the at least one mapped pixel in the mapped image by applying the local mapping function to the intensity value of the at least one raw pixel in the raw image to generate the intensity value of the at least one mapped pixel; and • decoding the symbol using the mapped image.