Hello,

I am trying to compute the log transformation of an image(very easy... I know). But I am not getting the right result and I really don't know what I am doing wrong. I know the image provided is in the range of 0 and 1.5x10^6. But when I save the pixel values of this image to a text file, the maximum value that I observe is 20. I think this is preventing my calculations, but I don't know how to fix it? *really frustrated because I have tried everything I can think of.

Thanks for your help in advance

Please see code:

void logTransform()
{
	IplImage *imgforLog; 
	imgforLog = cvLoadImage("l.BMP",1);
	int heightLog, widthLog;
	uchar *dataLog;
	heightLog = imgforLog->height;
	widthLog = imgforLog->width;
	dataLog = (uchar*) imgforLog->imageData;

	IplImage *logtr;
	logtr = cvCreateImage( cvGetSize(imgforLog), IPL_DEPTH_8U, 1 );	
	uchar *log_data;
	log_data = (uchar*)logtr->imageData;
	int logt;
	float r;
	long int answer;

	cvSaveImage("Saved/inputlog.png", imgforLog);

//note: when c_fm, c_fs, min_log, max_log was set to double it gave weird result (image)
	int c_fm, c_fs, min_log, max_log;
	min_log = log_data[0];
	max_log = log_data[0];

	cout << min_log << ":" << max_log << endl;
	for ( int a = 0; a < sizeof(imgforLog); a++)
	{
		for (int i = 0; i < heightLog; i++) {
		for (int j = 0; j < widthLog; j++) {

		logt = 0;
		r = (dataLog[((widthLog * i) + j)]);
		
		logt = (1 *log10(1+r));
	

		if(min_log < logt)
		{
			a++;
		}
		else if (min_log > logt)
		{
			min_log = logt;
		} 
		}}

	}

	for ( int a = 0; a < sizeof(imgforLog); a++)
	{
		for (int i = 0; i < heightLog; i++) {
		for (int j = 0; j < widthLog; j++) {
		logt = 0;
		r = (dataLog[((widthLog * i) + j)]);
		
		logt = (1 *log10(1+r));
		

		if(max_log > logt)
		{
			a++;
		}
		else if (max_log < logt)
		{
			max_log = logt;
		} 
		}}

	}

	cout << min_log << ":" << max_log << endl;
	for (int i = 0; i < heightLog; i++)
	{
		for (int j = 0; j < widthLog; j++)
		{
		logt = 0;
		r = (dataLog[((widthLog * i) + j)]);
		
		logt = (1 *log10(1+r));
		c_fm = logt - min_log;
		c_fs = (R_MAX * (c_fm/max_log));
		log_data[((widthLog * i) + j)] = c_fs;
		}
	}
	
	cvSaveImage("Saved/Log.png", logtr);
	
	cvReleaseImage(&img);
	cvReleaseImage(&image);
	cvReleaseImage(&imgforLog);
	cvReleaseImage(&logtr);
}
This article has been dead for over six months. Start a new discussion instead.