A method of column Fixed Pattern Noise correction, the method comprising for each column: sampling the level of a first optical black pixel; calculating a difference between the first OB pixel level and a target level, the target level being calculated by averaging OB pixels at a beginning of a line, which have not had any column fixed pattern noise correction applied; storing the difference in a memory as an offset; setting the value of a push size to a significance parameter, wherein the significance parameter is set in proportion to the average uncertainty of a first direct offset estimate and is scaled based on a gain setting; sampling the level of the next OB pixel; reading the offset from memory; adding the offset to the next OB pixel level to form a modified next OB pixel level; determining whether the modified next OB pixel level is above or below the target level; if the modified next OB pixel level is above the target level, then the offset value is pushed down by a push-size and written to memory; if the modified next OB pixel is below the target level, then the offset value is pushed up by a push-size and written to memory; comparing the push-size with a minimum step size; if the push-size is larger than the minimum step size, then the push-size is divided by two; and determining whether a last OB pixel has been sampled, and if not, then repeating sampling a next OB pixel, wherein after a last OB pixel has been sampled, an offset value in memory is applied to each signal pixel in the column. sampling the level of a first optical black pixel; calculating a difference between the first OB pixel level and a target level, the target level being calculated by averaging OB pixels at a beginning of a line, which have not had any column fixed pattern noise correction applied; storing the difference in a memory as an offset; setting the value of a push size to a significance parameter, wherein the significance parameter is set in proportion to the average uncertainty of a first direct offset estimate and is scaled based on a gain setting; sampling the level of the next OB pixel; reading the offset from memory; adding the offset to the next OB pixel level to form a modified next OB pixel level; determining whether the modified next OB pixel level is above or below the target level; if the modified next OB pixel level is above the target level, then the offset value is pushed down by a push-size and written to memory; if the modified next OB pixel is below the target level, then the offset value is pushed up by a push-size and written to memory; if the modified next OB pixel level is above the target level, then the offset value is pushed down by a push-size and written to memory; if the modified next OB pixel is below the target level, then the offset value is pushed up by a push-size and written to memory; comparing the push-size with a minimum step size; if the push-size is larger than the minimum step size, then the push-size is divided by two; and determining whether a last OB pixel has been sampled, and if not, then repeating sampling a next OB pixel, wherein after a last OB pixel has been sampled, an offset value in memory is applied to each signal pixel in the column.