/**  logim.cpp
*
*   Converts image to logarithmic range
*
**/

#include <stdio.h>
#include <math.h>
#include "image.h"

void log_image(IMAGE *src, IMAGE *dst, double decades);

int main(int argc, char *argv[])
{
	IMAGE *fp,*gp;
	char *filename;
	double decades = 4.0;
	
	if (argc<2) {
		printf("Usage: logim filename [# decades]\n");
		return -1;
	}
	filename = argv[1];
	if (argc>2) sscanf(argv[2]," %lf",&decades);
	fp = open_image(filename);
	if (!fp) return -1;
	printf("image file: %s\n",filename);
	printf("image size: %d x %d\n",fp->hlen,fp->vlen);
	if (fp->type != PIX_FLOAT) {
		printf("image not of type FLOAT\n");
		return -1;
	}
	printf("image logorithmic scale: %g decades\n",decades);
	
	/* Convert to logarithmic range */
	
	log_image(fp,fp,decades);
	return 0;
}

void log_image(IMAGE *src, IMAGE *dst, double decades)
{
	int i,j;
	pixel *buf;
	float v,*vp;
	buf = make_buffer(src);
	for (j=0; j<src->vlen; j++) {
		get_line(src,j,buf,PIX_FLOAT);
		vp = (float *)buf;
		for (i=0; i<src->hlen; i++) {
			v = *vp;
			v = (v>0.0? 1.0+log10(v)/decades: 0.0);
			if (v<0.0) v=0.0;
			*vp++ = v;
		}
		put_line(dst,j,buf,PIX_FLOAT);
	}
	free_buffer(buf);
}
