Интерполированная пиковая локализация в окне 3х3 - PullRequest
0 голосов
/ 20 февраля 2011

Я использую C ++ для создания программы, чтобы найти субпиксельное расположение пиков в массиве.В настоящее время я нахожу максимумы в окне 3х3, так что центральный пиксель в каждом окне больше, чем каждый из его 8 соседей.

Существует ли хорошо известный метод определения местоположения пика до субпиксельной точности?

Я читал о представлении массива с помощью разложения Тейлора до квадратичных членов и о его производной, равной нулю, чтобы найти смещение, но это выглядит немного тяжеловесно ...

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Если это кажется вам «тяжеловесным», то все тяжеловесно.Вообще говоря, вам нужен алгоритм интерполяции, чтобы перейти от дискретного представления к некоторому непрерывному представлению и найти пик.Использование «обработки изображений» подразумевает функции в 2D.Я могу предложить использовать некоторую базовую интерполяцию (линейную, билинейную, кубическую и т. Д.) И найти пики, где производные переходят в 0.

0 голосов
/ 22 февраля 2011

Спасибо @Ross.Вот фрагмент кода того, что я написал, чтобы выполнить работу на тот случай, если кто-то еще ищет то же самое.

//
// By approximating with Taylor expansion to quadratic terms, the peak should
// lie at offset [ix,iy] from as calculated by:
//
//   [ix]  =  - [d2I/dx2  d2I/dxy]^-1 . [dI/dx]
//   [iy]       [d2I/dxy  d2I/dy2]      [dI/dy]
//
//
// Assume 'arr' is our array of values (i.e. image) and [x,y] is the location of 
// of a peak pixel in the array.  The interpolated location of the peak is given 
// by the point [x+ix][y+iy].
//

float dx = (arr[x+1][y] - arr[x-1][y]) / 2.f;
float dy = (arr[x][y+1] - arr[x][y-1]) / 2.f;
float dxx = (arr[x+1][y] + arr[x-1][y] - 2 * arr[x][y]);
float dyy = (arr[x][y+1] + arr[x][y-1] - 2 * arr[x][y]);
float dxy = (arr[x+1][y+1] - arr[x+1][y-1] - arr[x-1][y+1] + arr[x-1][y-1]) / 4.f;

float det = 1.f/(dxx*dyy - dxy*dxy);

float ix = x - (dyy*dx - dxy*dy) * det;
float iy = y - (dxx*dy - dxy*dx) * det;
...