/********************************************************************** * nntiff.c * * (C) 2000 J. Ahrensfeld * **********************************************************************/ #include #include #include #include "nntypes.h" #include "nnet.h" #include "nntiff.h" #include "tiffio.h" #define TIFF_FILENAME "test" #define TIFF_PASS_WIDTH 200 #define TIFF_PASS_HEIGHT 200 #define TIFF_NUM_FRAMES 1 /**********************************************************************/ UINT32 CpyChar2Dbl(double *pDoubleArr, UINT8 *pCharArr, UINT32 nChars) { UINT32 i; for (i=0; i v2) return v1; else return v2; } void Normalize(double *pBuffer, double normVal, UINT32 len) { UINT32 i; double maxVal = normVal; for (i=0; i frameCnt=0; return EXIT_SUCCESS; } UINT32 TiffOut(TIFFOUT *pObj, NNET *pNet) { TIFF *pTifOut; ttag_t config, nBits, nSamples, photometric; UINT8 *pLineBuf; UINT32 width, height, tx, ty; INT32 status, ci; char tiffName[100], framenum[8]; FLOAT64 *pIn, *pOut, xVal, yVal; pLineBuf = NULL; pLineBuf = (char*)_TIFFmalloc(TIFF_PASS_WIDTH*sizeof(UINT8)); pIn = (double*) malloc(pNet->nIn*sizeof(double)); pOut = (double*) malloc(TIFF_PASS_HEIGHT*pNet->nOut*sizeof(double)); if (pNet->nIn == 2) { photometric = PHOTOMETRIC_MINISBLACK; width = 200; height = 200; config = PLANARCONFIG_CONTIG; nBits = 8; nSamples = 1; sprintf(framenum,"%4d",pObj->frameCnt); ci=0; while (framenum[ci]) { if(framenum[ci]==0x20) framenum[ci]=0x30; ci++; } sprintf(tiffName,"%s%s.tiff",TIFF_FILENAME,framenum); pTifOut = TIFFOpen(tiffName,"w"); status = TIFFSetField(pTifOut, TIFFTAG_IMAGEWIDTH, TIFF_PASS_WIDTH); status = TIFFSetField(pTifOut, TIFFTAG_IMAGELENGTH, TIFF_PASS_HEIGHT); status = TIFFSetField(pTifOut, TIFFTAG_PLANARCONFIG, config); status = TIFFSetField(pTifOut, TIFFTAG_PHOTOMETRIC, photometric); status = TIFFSetField(pTifOut, TIFFTAG_BITSPERSAMPLE, nBits); status = TIFFSetField(pTifOut, TIFFTAG_SAMPLESPERPIXEL, nSamples); status = TIFFSetField(pTifOut, TIFFTAG_ORIENTATION, 1); } for (ty=0; ty < TIFF_PASS_HEIGHT; ty++) { yVal = (FLOAT64)ty / TIFF_PASS_WIDTH; for (tx=0; tx < TIFF_PASS_WIDTH; tx++) { xVal = (FLOAT64)tx / TIFF_PASS_WIDTH; pIn[0] = xVal; pIn[1] = yVal; NetFeedForward(pNet, pIn, &pOut[tx]); } Normalize(pOut, 1.0, TIFF_PASS_WIDTH); CpyDbl2Char(pLineBuf, pOut, TIFF_PASS_WIDTH); status = TIFFWriteScanline(pTifOut, pLineBuf, ty, 0); } printf("Write frame %d\n",pObj->frameCnt++); TIFFClose(pTifOut); if (pLineBuf) _TIFFfree(pLineBuf); if (pIn) free(pIn); if (pOut) free(pOut); return EXIT_SUCCESS; }