1. Ну в нужной мне реализации фильтра считается первая производная.
I_mx = I-I(:,[1 1:nx-1]);
I_px = I(:,[2:nx nx])-I;
I_my = I-I([1 1:ny-1],;
I_py = I([2:ny ny],-I;
I_x = (I_mx+I_px)/2;
...
a_grad_I = sqrt(Dx.^2+Dy.^2);
[/code]
Я попробовал оператор Собеля, но значения не совпали.
Как именно лучше ходить по сырым изображениям? Через ptr, как на робофоруме писали?
[code]
for( int y=0; y<image->height; y++ )
{
uchar* ptr = (uchar*) (image->imageData + y * image->widthStep);
for( int x=0; x<image->width; x++ )
{
ptr[3*x] = 0; // B
ptr[3*x+1] = 0; // G
ptr[3*x+2] = 255; // R
}
}
2. Проблема оказалась не в скалярах. Указанные выше преобразования влекут появление отрицательных интенсивностей.
Таким образом, мне надо передать в функцию изображение, вытащить из него сырую матрицу cvMat, а с ней уже делать то, что нужно.
У нее, надеюсь, нету обнуления отрицательных значений val.
Вопрос, как именно вытащить эту матрицу?
Нашел такой пример, но не разобрался еще.
..
CvMat hdr;
CvMat *mass = cvReshape(image,&hdr,1);
..
Извиняюсь за наивные вопросы, с библиотекой еще не познакомился как надо.