Я хочу нормализовать карту разметки таким образом, чтобы: 1. Норнализировать значения на карте до фиксированного диапазона [0..M] 2. Найти M (глобальные максимумы в изображении с разной степенью) и m (среднее значение все другие локальные максимумы) 3.globally multyplying карту на квадрат (мм)Как нормализовать differnce карту в C++ с помощью opencv?
Но я не получаю правильный выход ... Масштабный коэффициент слишком высок .. примерно 23000 .. не должна быть между 0-255?
int main()
{
Mat img = imread("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat img1,diff;
if (img.empty()) //if unsuccessful, exit the program
{
cout << "Image cannot be loaded..!!" << endl;
return -1;
}
int m,n;
m=(int)(img.rows/2);
n=(int)(img.cols/2);
resize(img, img1,Size(m,n)); //downsample by 2
resize(img1, img1,img.size(), 0, 0, CV_INTER_NN); //interpolation by 2
absdiff(img,img1,diff);
//------to find global maxima present in the image-------------
double min2,max2;
Point x,y;
minMaxLoc(diff,&min2,&max2,&x,&y);
cout<<"global max= "<<max2<<" location= "<<y<<endl;
//--to find local maximas present in the image using 5*5 kernel----
double min1,max1;
double val[2025];
int count=0;
Mat arr=Mat::zeros(5,5,img.type());
int i,j,a,b,a1;
for(a=0;a<diff.rows;a=a+5)
{
for(b=0;b<diff.cols;b=b+5)
{
m=n=0;
for(i=a;i<a+5;i++)
{
for(j=b;j<b+5;j++)
{
a1=diff.at<uchar>(i,j);
arr.at<uchar>(m,n)=a1;
n++;
}
m++;n=0;
}
minMaxLoc(arr,&min1,&max1);
val[count]=max1;
count++;
}
}
double sum=0,mean;
for(i=0;i<count;i++)
{
sum=sum+val[i];
}
mean=sum/count;
cout<<"count="<<count<<endl;
cout<<"sum= "<<sum<<endl;
cout<<"mean= "<<mean<<endl;
double scale;
scale=pow((max2-mean),2);
cout<<"scale= "<<scale;
imshow("original",diff);
imshow("normalized output",scale*diff);
waitKey(0);
return 0;
}
Ваш код отсутствует '1. Норнализировать значения на карте до фиксированного диапазона [0..M] '. Остальное должно быть в порядке. Если вы не выбрали 'M' или не выбрали' M = 255', ваш квадратный масштабный коэффициент может быть любым размером от 0 до 65025 для 8-битного типа. Так что это все о выборе 'M', который даже не был бы важен, если бы у вас не было ограничений по типу данных. – Micka