我一直在处理视网膜的图像,我已阅读了许多帖子,我试图复制,我读了一篇文章,他们使用下面的公式来规范化,并且图像的底部不会影响血液只有那个时候在OpenCV中使用它才能以相同的方式工作,所以我不知道我怎么能正常化,这样血管不会受到视网膜底部的影响。接下来,我留下我使用的代码,
using namespace cv;
using namespace std;
int main(int argc, char** argv ){
Mat green= cv::imread("green.png");
Mat img= cv::imread("img.jpg");
double minVal;
double maxVal;
minMaxLoc( green, &minVal, &maxVal);
cout << "min val : " << minVal << endl;
cout << "max val: " << maxVal << endl;
double minVal2;
double maxVal2;
double media = 58;
minMaxLoc( img, &minVal2, &maxVal2);
cout << "min val : " << minVal2 << endl;
cout << "max val: " << maxVal2 << endl;
Mat eqIm(green.rows,green.cols,green.type());
int nl = img.rows; // number of lines
int nc = img.cols * img.channels();
for (int j = 0; j<nl; j++) {// j is each row
for (int ec = 0; ec < nc; ec++) {//ec is each col and channels
eqIm.data[j*img.cols*img.channels() + ec] =
((green.data[j*img.cols*img.channels() + ec] - (maxVal)) *(((maxVal2-minVal2/((minVal)-(maxVal)))+ (minVal2))));
}
}
imwrite("eqIm.png", eqIm);
waitKey(0);
return 0;
}
我也显示了图像的结果,下面你可以看到原始图像:
结果图片:
使用的公式: