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

mrgloom

Пользователи
  • Количество публикаций

    2 302
  • Зарегистрирован

  • Посещение

  • Days Won

    142

Все публикации пользователя mrgloom

  1. Stereo Panorama

    http://www.stereomaker.net/panorama/panoramae.htm стереопанорамы как тут можно делать из 1 картинки? т.е. из панорамы в стереопанораму. может кто еще подкинет ссылок. могут ли нормальные люди смотреть их без очков?) не вредно ли это?)
  2. Matlab+Opencv

    Кто нибудь имел дело с вызовом функций из matlab через opencv или наоборот? что для этого используется dll-ки?
  3. remap задействована в самом внутреннем цикле. Значит, можно разделить изображение по высоте на число потоков и отдавать каждому из них свою "полоску" исходного изображения. про полоску то понятно, но дело в том как эти полоски потом сложатся в картинку,т.к. между полосками нету интерполяции никакой.
  4. вот нашел, получается все завязано на ремап и надо произвести постобработку на конечном изображении, которая возникает из-за деления на куски. void warpPerspective( const Mat& src, Mat& dst, const Mat& M0, Size dsize, int flags, int borderType, const Scalar& borderValue ) { dst.create( dsize, src.type() ); CV_Assert( dst.data != src.data ); const int BLOCK_SZ = 32; short XY[BLOCK_SZ*BLOCK_SZ*2], A[BLOCK_SZ*BLOCK_SZ]; double M[9]; Mat matM(3, 3, CV_64F, M); int interpolation = flags & INTER_MAX; if( interpolation == INTER_AREA ) interpolation = INTER_LINEAR; CV_Assert( (M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 3 && M0.cols == 3 ); M0.convertTo(matM, matM.type()); if( !(flags & WARP_INVERSE_MAP) ) invert(matM, matM); int x, y, x1, y1, width = dst.cols, height = dst.rows; int bh0 = std::min(BLOCK_SZ/2, height); int bw0 = std::min(BLOCK_SZ*BLOCK_SZ/bh0, width); bh0 = std::min(BLOCK_SZ*BLOCK_SZ/bw0, height); for( y = 0; y < height; y += bh0 ) { for( x = 0; x < width; x += bw0 ) { int bw = std::min( bw0, width - x); int bh = std::min( bh0, height - y); Mat _XY(bh, bw, CV_16SC2, XY), matA; Mat dpart(dst, Rect(x, y, bw, bh)); for( y1 = 0; y1 < bh; y1++ ) { short* xy = XY + y1*bw*2; double X0 = M[0]*x + M[1]*(y + y1) + M[2]; double Y0 = M[3]*x + M[4]*(y + y1) + M[5]; double W0 = M[6]*x + M[7]*(y + y1) + M[8]; if( interpolation == INTER_NEAREST ) for( x1 = 0; x1 < bw; x1++ ) { double W = W0 + M[6]*x1; W = W ? 1./W : 0; int X = saturate_cast<int>((X0 + M[0]*x1)*W); int Y = saturate_cast<int>((Y0 + M[3]*x1)*W); xy[x1*2] = (short)X; xy[x1*2+1] = (short)Y; } else { short* alpha = A + y1*bw; for( x1 = 0; x1 < bw; x1++ ) { double W = W0 + M[6]*x1; W = W ? INTER_TAB_SIZE/W : 0; int X = saturate_cast<int>((X0 + M[0]*x1)*W); int Y = saturate_cast<int>((Y0 + M[3]*x1)*W); xy[x1*2] = (short)(X >> INTER_BITS); xy[x1*2+1] = (short)(Y >> INTER_BITS); alpha[x1] = (short)((Y & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + (X & (INTER_TAB_SIZE-1))); } } } if( interpolation == INTER_NEAREST ) remap( src, dpart, _XY, Mat(), interpolation, borderType, borderValue ); else { Mat matA(bh, bw, CV_16U, A); remap( src, dpart, _XY, matA, interpolation, borderType, borderValue ); } } } }
  5. еще вопрос как распараллелить warp_patch (имеется ввиду либо подача изображения частями в разные треды, либо как то еще) т.е. даже этот вот кусок cvWarpPerspective( src_ext, dst, warp_matrix );
  6. Яркости пары изображений

    скорее всего надо не только плавно выровнять границу, но и еще привести к среднему яркость 2-х изображений. + возможно какие то идеи и от High Dynamic Range взять
  7. Как прикрутить OpenCV к билдеру?

    выложите код, интересно посмотреть. какие то ограничения есть?
  8. Thread + MinGW + OpenCV

    process - thread -stack frame при дебаге в VS
  9. Объединились. Что дальше?

    http://stackoverflow.com/questions/5728885/how-do-i-draw-an-image-based-on-a-simple-polygon http://stackoverflow.com/questions/2992264/extracting-a-quadrilateral-image-to-a-rectangle что то похожее
  10. Объединились. Что дальше?

    ну remap вроде умеет любое преобразование делать. но это опять же opencv, но от него можно отталкиваться наверно. ну наверно надо найти как делать affine transformation или perspective transformation, что то в таком духе, а потом уже интерполяцию делать(лучше бикубическую).
  11. Объединились. Что дальше?

    что то мне кажется имелись ввиду эпиполярные линии, а не нахождение линий которое я имел ввиду. epipolar lines Uncalibrated epipolar rectification Epipolar Rectification Epipolar geometry что значит вручную?
  12. OpenCV: Классификатор

    surf тут не подходит, ибо он сравнивает зебру и ту же самую зебру (например под другим углом или если видна половина зебры). а вам надо сравнить зебру и другую зебру. или точнее классифицировать к какому классу принадлежит предмет. Image retrieval Content-based image retrieval
  13. Объединились. Что дальше?

    такое ощущение, что если брать на примере 2-х изображений, то не одно относительно другого варпается (второе не изменяется), а они оба преобразуются, так чтобы была примерно одинаковая высота, а на месте склейки прогиб. а вообще надо еще почитать тот документ, я его только бегло просмотрел, мало что понял. вот как раз такое ищу, только мало нашел материала по этой теме. http://rghost.ru/5374392 тут некоторые материалы
  14. есть возможность сделать афинное преобразование через GDI? что то типа по координатам углов на 1 изображении (srcQuad) преобразует в новое изображение с координатами dstQuad. cvGetPerspectiveTransform(srcQuad,dstQuad,warp_matrix); cvWarpPerspective( src, dst, warp_matrix );
  15. Объединились. Что дальше?

    у меня открывает. Multi-Image Matching using Invariant Features by Matthew Alun Brown B.A., Cambridge University, 2000 M.Eng., Cambridge University, 2000 A THESIS SUBMITTED IN PARTIAL FULFILMENT OF THE REQUIREMENTS FOR THE DEGREE OF Doctor of Philosophy in THE FACULTY OF GRADUATE STUDIES (Computer Science) The University of British Columbia July 26, 2005 © Matthew Alun Brown 2005
  16. Объединились. Что дальше?

    Automatic panorama straightening http://cvlab.epfl.ch/CA27B451-D069-4FD9-9D94-7061CEE31F1C/FinalDownload/DownloadId-56EA07B3B4FAF18741252AB9A5F4A4AF/CA27B451-D069-4FD9-9D94-7061CEE31F1C/~brown/papers/phd.pdf
  17. мало понял выложенный код. вот есть функция, надо ее доделать. изменение rc, похоже не дает нужного результата, т.к. изображение просто полностью в него вписывается(а мне надо например выделить из прямоугольного изображение его часть), получается надо изменять my_Bitmap.Bitmap()? или есть какой то еще способ вывести?
  18. Проблемы с ExtractSURF() и CvMemStorage

    не понял, чтобы варпать же нужно загружать все равно большое поле куда варпиться тайл? или уже преобразованные тайлы каким то образом копируются через gdal в большое изображение? какие ограничения есть в gdal? на размер изображения или на размер используемой памяти? там какой то внутренний формат? .PSD позволяет 300к х 300к пикселей. Матрица преобразования одна. Её я вычисляю для всего изображения. В соответствии с этой матрицей трансформирую части. Как видите - неплохо выглядит, но это только с этим изображением - с другими глючит, но видимо я что-то не учел я не про те картинки которые вы выложили, я про реальную задачу когда склеиваются например 2 изображения, и каждое делится например на N тайлов и между парами тайлов находятся точки-декрипторы.
  19. Проблемы с ExtractSURF() и CvMemStorage

    так вы варпите не через opencv? а через что? Я исходил вот из чего: так как части взаимосвязаны, то после трансформации они также будут взаимосвязаны ну я имел ввиду, что у разных тайлов с 1 изображения должны быть разные матрицы преобразований, хотя бы по смещению, а по повороту должны быть примерно одинаковые +-ошибка , так вот интересно какая это будет ошибка.
  20. Проблемы с ExtractSURF() и CvMemStorage

    кстати я забыл для чего вы их делите? если картинки большие, то все равно надо выделять память размер тайла+ размер большого поля куда его варпать. если делите на тайлы для того чтобы находить для них точки-дескрипторы, то как потом варпаете? тайл относительно тайла? или как то усредняете матрицу преобразования по тайлам из которых состоит 1 картинка?
  21. только там вычисляется как double, а тут использован указатель float. (c указателями double почему то не работает) мне кажется надо как то warp_patch переписать под mapx,mapy и сложить с mapx,mapy которые получаются от barrel_pincusion_dist. (только не уверен, что просто сложить будет правильно)
  22. связность какая должна быть? 4-х или 8-ми? если например устранять разрывы просто соединением конечных точек, то будет не точно наверно, но вполне рабоче, но может можно как то более сложно интерполировать, поэтому я предлагал почитать про сплайны. наверно можно как то пройтись по точкам и смотреть их связность и помечать/удалять лишние, но например какие лучше удалять внутри контура или снаружи, или без разницы? + алгоритмы не учитывают маленькие циклы.(если они появятся)
  23. Проблемы с ExtractSURF() и CvMemStorage

    Эххх, наверное придется А что дает функция cvGetPerspectiveTransform(srcQuad,dstQuad,warp_matrix); ? Просто матрицу преобразования на основе данных об паре четырех углов ? да. видимо вам она бесполезна, т.к. вы отталкиваетесь от warp_matrix. ну вообщем если имея координаты начальных углов и матрицу можно получить координаты конечных, то надо пройтись по линии разреза с шагом в 1 пиксель, брать по 1 пикселю с каждой стороны разреза, преобразовывать в новые координаты, усреднять значение пары пикселей и присваивать это значение пекселям между ними(пикселям которые идут по прямой соединяющей 2 пикселя)
  24. Проблемы с ExtractSURF() и CvMemStorage

    как эти параметры высчитываются? double traWidth = 503.15322132259524, traHeight = 554.71176535116138; double shiftX = 54.212963249762133, shiftY = -74.906898655217859; вообще по идее если работаем с изображениями как с 4 углами-точками, то можно использовать cvGetPerspectiveTransform(srcQuad,dstQuad,warp_matrix); cvWarpPerspective( src_ext, dst, warp_matrix ); и наверно надо сделать так чтобы по 2 точки dstQuad у соседних кусков совпадали. ( хотя наверно ошибка в warp_matrix опять же накопится и даст черные полосы) ну значит надо высчитывать пары(или группы по 4 точки например) точек на стыке и делать хотя бы линейную интерполяцию, т.е. усреднять. п.с. небольшие проекты можно прям так сюда копипастить.
  25. Работа со слоями

    // split the image into separate color planes vector<Mat> planes; split(img_yuv, planes); http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html?highlight=split#split слои=каналы?
×