Перейти к содержимому
Compvision.ru
ProgRoman

Filter Gabor для распознавания

Recommended Posts

В примерах opencv есть реализация фильтра Габора, ниже привел код


Mat getGaborKernel( Size ksize, double sigma, double theta,

                            double lambd, double gamma, double psi, int ktype )

{

    double sigma_x = sigma;

    double sigma_y = sigma/gamma;

    int nstds = 3;

    int xmin, xmax, ymin, ymax;

    double c = cos(theta), s = sin(theta);


    if( ksize.width > 0 )

        xmax = ksize.width/2;

    else

        xmax = cvRound(std::max(fabs(nstds*sigma_x*c), fabs(nstds*sigma_y*s)));


    if( ksize.height > 0 )

        ymax = ksize.height/2;

    else

        ymax = cvRound(std::max(fabs(nstds*sigma_x*s), fabs(nstds*sigma_y*c)));


    xmin = -xmax;

    ymin = -ymax;


    CV_Assert( ktype == CV_32F || ktype == CV_64F );


    Mat kernel(ymax - ymin + 1, xmax - xmin + 1, ktype);

    double scale = 1/(2*CV_PI*sigma_x*sigma_y);

    double ex = -0.5/(sigma_x*sigma_x);

    double ey = -0.5/(sigma_y*sigma_y);

    double cscale = CV_PI*2/lambd;


    for( int y = ymin; y <= ymax; y++ )

        for( int x = xmin; x <= xmax; x++ )

        {

            double xr = x*c + y*s;

            double yr = -x*s + y*c;


            double v = scale*exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi);

            if( ktype == CV_32F )

                kernel.at<float>(ymax - y, xmax - x) = (float)v;

            else

                kernel.at<double>(ymax - y, xmax - x) = v;

        }


    return kernel;

}

у меня почему то результат работы фильтра очень бледный порой вообще практически не заметное изображение, вызываю фильтр таким образом

    cv::Mat image = cv::imread("E:/Projects/ComputerVision/Data bases/faces/test/image_0450.jpg",1);

    cv::imshow("Src", image);

    cv::Mat src;

    cv::cvtColor(image, src, CV_BGR2GRAY);

    src.convertTo(src_f, CV_64F, 1.0/255, 0);


    Mat res_f = getGaborKernel(Size(25,25),15,100,30,50,5);

    Mat dst;

    filter2D(src_f,dst,CV_32F,res_f);

    imshow("res",dst);

пытался менять параметры пока ничего нормального не нашёл результат фильтра практически не виден dst порой совсем чёрная. Пока пытаюсь всё ещё менять параметры смотрю как меняется изображение. Может кто знает сталкивался с такой проблемой... возможно я какой-то параметр не совсем корректно задаю... ниже прикреплены два изображения одно оригинальное другое после обработки фильтром

И мне не совсем ясно каким образом фильтр габора можно использовать в распознавании... Имеем оригинальное изображение, затем после обработки фильтром получаем новое обработанное.. и что дальше каким образом использовать это обработанное отфильтрованное изображение... вообще по идее как я понимаю.. мы должны бы к изображению применить фильтры под разным углом(с различным theta) при различном theta отфильтрованное изображение меняется.. но как это всё применять не ясно может быть кто-то занимался этим

post-2515-0-31051000-1352197790_thumb.pn

post-2515-0-78006800-1352197799_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видимо что-то родственное этой теме:

http://www.compvision.ru/forum/index.php?showtopic=894

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот посмотрите http://www.compvision.ru/forum/index.php?showtopic=861&view=findpost&p=7236 ,я использовал фильтр Габора который выкладывал Smorodov и прикрутил к нему SVM.

я пробовал для поиска ключевых точек, смысл в том что мы применяем N фильтров габора под разными углами и разными масштабами для всего изображения, потом выделяем точки для обучения(берем вокруг них небольшую окрестность) получаем вектор-дескриптор, потом его суём в классификатор, теортетически так можно найти например уголки губ.(не знаю возможно можно как то можно считать только для точек, а не для всего изображения, а то получается жирно)

так же можно просто использовать целиком для рамки лица для всех пикселей как дескриптор.

но тут мы имеем проблему со скейлом как всегда.

а вообще этот код можно использовать и для нахождения текстур например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×