DSPRelated.com
Forums

Estimating pixel shifts

Started by shan...@gmail.com November 30, 2005
Say I take an image, apply a (possibly fractional) pixel shift to it and further corrupt it by white gaussian noise. Is there any way (never mind complexity, to begin with) to estimate this shift using the corrupted image?

Thanks!


Im still new to the 2D field, but in 1D i would have
done an autocorrelation and found the distance of the
peak which would tell me the delay-which in this case
i could see as the shift.
If it helps, I have found that many concepts in 1D
apply the same way in 2D too.

Ranjith

--- shankar84@shan... wrote:

> Say I take an image, apply a (possibly fractional)
> pixel shift to it and further corrupt it by white
> gaussian noise. Is there any way (never mind
> complexity, to begin with) to estimate this shift
> using the corrupted image?
>
> Thanks! >
\


Try this -

You'll need some way of taking your template, or original, image and generating (possibly fractional) shifted versions of it. For each shifted version of the image, compute the SAD (sum of absolute differences) or better yet, 2D cross-correlation "cost function value" between the shifted and corrupted image and the shifted version of the template bitmap. Sample your "shift space" into rectalinear grid, and for each grid point (which corresponds to a shift in the x and a shift in the y direction) compute your cost metric.

Once you have this 2D array of cost function values, use interpolation (NOT linear interpolation), say a bicubic interpolant, to "upsample" your discretized cost function matrix. If you're using the SAD, L1, or L2 norm as your cost function, then the shift is the minimum of your interpolated function. If your using the 2D cross-correlation, then the maximum of your interpolated function corresponds to the best shift.

If you're doing this on a PC, there are very efficient ways of generating the shifted bitmaps. You can use the Intel Integrated Performance Primitives library to do it completely in SW, or use OpenGL and let your graphics card do the heavy lifting. I wrote an article in the September 2001 issue of C/C++ Users Journal describing the implementation of the latter. See my web page for more details.

HTH,

-SQ shankar84@shan... wrote:
Say I take an image, apply a (possibly fractional) pixel shift to it and further corrupt it by white gaussian noise. Is there any way (never mind complexity, to begin with) to estimate this shift using the corrupted image?

Thanks!
Image processing Image processing software Image processing solution Image processing system Digital image processing Image processing tool

Shehrzad Qureshi
Author of Embedded Image Processing on the TMS320C6000 DSP
www.squreshi.com


El 30/11/2005, a las 23:49, shankar84@shan... escribi

> Say I take an image, apply a (possibly fractional) pixel shift to
> it and further corrupt it by white gaussian noise. Is there any way
> (never mind complexity, to begin with) to estimate this shift using
> the corrupted image?

I'm not sure whether your question is:

"If an image is shifted (possibly with a fractional step), and
contaminated by noise, can I estimate the shifting using the
corrupted image and the original image"

or it is:

"If I received an image that's been shifted (possibly with a
fractional step), and contaminated by noise, can I estimate the
shifting using _just_ the corrupted image"

If the former, you've gotten a fair amount of answers; if the latter,
it's impossible, unless you assume some model for the image you're
receiving...

--
Juan de Dios Santander Vela
Diplomado en CC. Ficas, Ingeniero en Electrica
Doctorando en Tecnologs Multimedia
Becario Predoctoral del Instituto de Astrofica de Andaluc

Alan Kay: La mejor forma de predecir el futuro es inventarlo.



Shankar,

Most of the suggested methods like maximising
autocorrelation or minimising sum of absolute
differences, should work.

In addition you may want to read some papers on image
mosaicing. The problem is very similar there, they try
to take care of rotation also(not just translation).

Regards
Ranjith

--- Ranj Nambiar <nambo99@namb...> wrote:

> Im still new to the 2D field, but in 1D i would have
> done an autocorrelation and found the distance of
> the
> peak which would tell me the delay-which in this
> case
> i could see as the shift.
> If it helps, I have found that many concepts in 1D
> apply the same way in 2D too.
>
> Ranjith
>
> --- shankar84@shan... wrote:
>
> > Say I take an image, apply a (possibly fractional)
> > pixel shift to it and further corrupt it by white
> > gaussian noise. Is there any way (never mind
> > complexity, to begin with) to estimate this shift
> > using the corrupted image?
> >
> > Thanks!
> >