Создание SIFT с нуля с использованием OpenCV: предложения по обнаружению экстремальных масштабных пространств
У меня проблемы. Я пытаюсь выполнить обнаружение экстремумов на серии DoG, которые являются результатом создания шкалы 4 октав и 5 шкал на октаву. Что мне нужно сделать, это:
Таким образом, мне нужно взять центральный пиксель скользящего окна на среднем изображении и сравнить его значение со своими соседями, а также со скользящими окнами 9x9 на изображении выше и ниже его в пространстве шкалы.
Я начал с создания скользящего окна 9x9 и создания серии вложенных циклов for для итерации октав и изображений DoG. Тем не менее, часть, на которой я застрял, состоит в том, как сравнить соседей в скользящем окне и как выделить центральный пиксель в скользящем окне среднего изображения. Это мой код до сих пор:
void SIFT::findExtrema()
{
// Define Sliding Window Parameters
int win_row, win_col = 9; // Size of window is 60x60
int stepSize = 1; // Number of pixels to move the window across the image.
int array_DoG_rows = sizeof(array_DoG)/sizeof(array_DoG[0]); // Returns number of rows for array_DoG
int array_DoG_cols = sizeof(array_DoG[0])/sizeof(array_DoG[0][0]); // Returns columns for array_DoG
// Scan images and find maxima and minima.
for(int i=0; i < array_DoG_rows; i++) // Iterate octaves
{
for(int j=1; j < array_DoG_cols; j++) // Interate scales. Start at second image in scale.
{
//Iterate through image 1
for(int row=0; row <= array_DoG[i][j].rows - win_row; row+=stepSize)
{
for(int col=0; col <= array_DoG[i][j].cols - win_col; col+=stepSize)
{
}
}
}
}
}
Я искал несколько онлайн-форумов и Stackru, в том числе здесь и здесь. Мой инстинкт состоит в том, чтобы реализовать серию циклов for для каждого изображения. Однако это кажется пустой тратой времени и ресурсов, поскольку изображение, находящееся глубже внутри гнезда, будет перемещать скользящее окно по всему изображению до того, как первое изображение настроит свое скользящее окно.