Я хочу искать строки на действительно маленьких (10х10 или меньше) изображениях. Я хочу использовать детектор линии LSD , потому что он очень быстрый. Я скачал там код C и получил образец того, как его использовать. Но я не понимаю, как заставить его не выполнять Гаусс и тому подобное, чтобы снизить качество данных.
Кстати, я использую функцию suc для выполнения LSD на открытом CV-изображении:
#include <iostream>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include "LSD.h"
using namespace std;
int linesFoundOnPicture;
void ProcessLSD(IplImage* source)
{
int w = source->width;
int h = source->height;
image_double lsdImage;
ntuple_list lsdOut;
unsigned int x,y,i,j;
lsdImage = new_image_double(w,h);
for(x=0;x<w;x++){
for(y=0;y<h;y++){
double RealColor = cvGetReal2D(source, y, x);
lsdImage->data[ x + y * lsdImage->xsize ] = RealColor;/* image(x,y) */
cout << RealColor << " ";
}
cout << endl;
}cout << endl;
lsdOut = lsd(lsdImage);
if (lsdOut->size == 0)
{
cout << "0 0 0 0";
}
else
{
cout << lsdOut->values[ 0 * lsdOut->dim + 0 ] << " " << lsdOut->values[ 0 * lsdOut->dim + 1] << " ";
cout << lsdOut->values[ 0 * lsdOut->dim + 2 ] << " " << lsdOut->values[ 0 * lsdOut->dim + 3 ] << " ";
linesFoundOnPicture = linesFoundOnPicture +1;
}
cout << endl;
cout << endl;
// cvReleaseImage(&source);
free_image_double(lsdImage);
free_ntuple_list(lsdOut);
}
Так может ли кто-нибудь помочь мне освоить ЛСД?)
Похоже, есть что-то вроде трех функций, которые предоставляют списки со строками в LSD.h ...
ntuple_list LineSegmentDetection( image_double image, double scale,
double sigma_scale, double quant,
double ang_th, double eps, double density_th,
int n_bins, double max_grad,
image_int * region );
ntuple_list lsd_scale(image_double image, double scale);
ntuple_list lsd(image_double image);
Похоже, лучший вариант для понимания параметров LSD - это этот флэш-порт lsd, где вы можете играть со значениями (мне кажется, первой из этих 3 функций lsd)