Doxygen Source Code Documentation
mri_to_rgb.c File Reference
#include "mrilib.h"Go to the source code of this file.
| Functions | |
| MRI_IMAGE * | mri_to_rgb (MRI_IMAGE *oldim) | 
| MRI_IMAGE * | mri_3to_rgb (MRI_IMAGE *rim, MRI_IMAGE *gim, MRI_IMAGE *bim) | 
| MRI_IMARR * | mri_rgb_to_3float (MRI_IMAGE *oldim) | 
| MRI_IMARR * | mri_rgb_to_3byte (MRI_IMAGE *oldim) | 
| MRI_IMAGE * | mri_sharpen_rgb (float phi, MRI_IMAGE *im) | 
| MRI_IMAGE * | mri_flatten_rgb (MRI_IMAGE *im) | 
| void | mri_invert_inplace (MRI_IMAGE *im) | 
Function Documentation
| 
 | ||||||||||||||||
| 
 Definition at line 66 of file mri_to_rgb.c. References ENTRY, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_COPY_AUX, MRI_FATAL_ERROR, MRI_FLOAT_PTR, mri_new_conforming, MRI_IMAGE::nvox, and RETURN. Referenced by mri_dup2D(), mri_warp3D_cubic(), mri_warp3D_linear(), mri_warp3D_NN(), mri_warp3D_quintic(), mri_warp_bicubic(), and NUD_rotate(). 
 00067 {
00068    MRI_IMAGE *newim ;
00069    register int ii , npix ;
00070    register byte * rgb ;
00071 
00072 ENTRY("mri_3to_rgb") ;
00073 
00074    if( rim == NULL || bim == NULL || gim == NULL ) RETURN( NULL );
00075 
00076    newim = mri_new_conforming( rim , MRI_rgb ) ; rgb = MRI_BYTE_PTR(newim) ;
00077    npix  = rim->nvox ;
00078 
00079    switch( rim->kind ){
00080 
00081       case MRI_byte:{
00082          byte * rr=MRI_BYTE_PTR(rim), * gg=MRI_BYTE_PTR(gim), * bb=MRI_BYTE_PTR(bim) ;
00083          for( ii=0 ; ii < npix ; ii++ ){
00084             rgb[3*ii  ] = rr[ii] ;
00085             rgb[3*ii+1] = gg[ii] ;
00086             rgb[3*ii+2] = bb[ii] ;
00087          }
00088       }
00089       break ;
00090 
00091       case MRI_float:{
00092          float * rr=MRI_FLOAT_PTR(rim), * gg=MRI_FLOAT_PTR(gim), * bb=MRI_FLOAT_PTR(bim) ;
00093          for( ii=0 ; ii < npix ; ii++ ){
00094             rgb[3*ii  ] = rr[ii] ;
00095             rgb[3*ii+1] = gg[ii] ;
00096             rgb[3*ii+2] = bb[ii] ;
00097          }
00098       }
00099       break ;
00100 
00101       default:
00102          fprintf(stderr,"mri_3to_rgb:  unrecognized image conversion %d\n",rim->kind) ;
00103          MRI_FATAL_ERROR ;
00104    }
00105 
00106    MRI_COPY_AUX(newim,rim) ;
00107    RETURN( newim );
00108 }
 | 
| 
 | 
| 
 Definition at line 218 of file mri_to_rgb.c. References ENTRY, far, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_COPY_AUX, mri_flatten(), MRI_FLOAT_PTR, mri_free(), mri_new_conforming, mri_to_float(), MRI_IMAGE::nvox, and RETURN. Referenced by ISQ_process_mri(). 
 00219 {
00220    MRI_IMAGE * flim , * shim , * newim ;
00221    byte  * iar , * nar ;
00222    float * sar , * far ;
00223    int ii , nvox , rr,gg,bb ;
00224    float fac ;
00225 
00226 ENTRY("mri_flatten_rgb") ;
00227 
00228    if( im == NULL ) RETURN( NULL );
00229 
00230    if( im->kind != MRI_rgb ) RETURN( mri_flatten(im) );
00231 
00232    flim  = mri_to_float( im ) ;                  /* intensity of input */
00233    shim  = mri_flatten( flim ) ;                 /* flatten intensity  */
00234    newim = mri_new_conforming( im , MRI_rgb ) ;  /* will be output     */
00235 
00236    nar = MRI_BYTE_PTR(newim) ; iar = MRI_BYTE_PTR(im) ;
00237    far = MRI_FLOAT_PTR(flim) ; sar = MRI_FLOAT_PTR(shim) ;
00238    nvox = newim->nvox ;
00239 
00240    for( ii=0 ; ii < nvox ; ii++ ){
00241       if( far[ii] <= 0.0 || sar[ii] <= 0.0 ){
00242          nar[3*ii] = nar[3*ii+1] = nar[3*ii+2] = 0 ;
00243       } else {
00244          fac = 255.9 * sar[ii] / far[ii] ; /* will be positive */
00245          rr  = fac * iar[3*ii]   ;
00246          gg  = fac * iar[3*ii+1] ;
00247          bb  = fac * iar[3*ii+2] ;
00248          nar[3*ii  ] = (rr > 255) ? 255 : rr ;
00249          nar[3*ii+1] = (gg > 255) ? 255 : gg ;
00250          nar[3*ii+2] = (bb > 255) ? 255 : bb ;
00251       }
00252    }
00253 
00254    mri_free(flim) ; mri_free(shim) ;
00255 
00256    MRI_COPY_AUX(newim,im) ;
00257    RETURN( newim );
00258 }
 | 
| 
 | 
| 
 Definition at line 262 of file mri_to_rgb.c. References ENTRY, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_RGB_PTR, and MRI_IMAGE::nvox. Referenced by AFNI_splashup(). 
 00263 {
00264    register byte *bar ;
00265    register int ii , nbar ;
00266 
00267 ENTRY("mri_invert_inplace") ;
00268 
00269    if( im == NULL ) EXRETURN ;
00270    switch( im->kind ){
00271      default: EXRETURN ;
00272      case MRI_byte:  nbar =   im->nvox ; bar = MRI_BYTE_PTR(im) ; break ;
00273      case MRI_rgb:   nbar = 3*im->nvox ; bar = MRI_RGB_PTR(im)  ; break ;
00274    }
00275    for( ii=0 ; ii < nbar ; ii++ ) bar[ii] = 255 - bar[ii] ;
00276    EXRETURN ;
00277 }
 | 
| 
 | 
| 
 Definition at line 144 of file mri_to_rgb.c. References ADDTO_IMARR, ENTRY, INIT_IMARR, MRI_IMAGE::kind, MRI_BYTE_PTR, mri_new_conforming, MRI_IMAGE::nvox, and RETURN. Referenced by mri_dup2D(). 
 00145 {
00146    MRI_IMARR * imar ;
00147    MRI_IMAGE * rim , * gim , * bim ;
00148    byte      * rr  , * gg  , * bb  , * rgb ;
00149    int ii , npix ;
00150 
00151 ENTRY("mri_rgb_to_3byte") ;
00152    if( oldim == NULL || oldim->kind != MRI_rgb ) RETURN( NULL );
00153 
00154    rim = mri_new_conforming( oldim , MRI_byte ) ; rr = MRI_BYTE_PTR(rim) ;
00155    gim = mri_new_conforming( oldim , MRI_byte ) ; gg = MRI_BYTE_PTR(gim) ;
00156    bim = mri_new_conforming( oldim , MRI_byte ) ; bb = MRI_BYTE_PTR(bim) ;
00157                                                   rgb= MRI_BYTE_PTR(oldim) ;
00158    npix = oldim->nvox ;
00159 
00160    for( ii=0 ; ii < npix ; ii++ ){
00161       rr[ii] = rgb[3*ii  ] ;
00162       gg[ii] = rgb[3*ii+1] ;
00163       bb[ii] = rgb[3*ii+2] ;
00164    }
00165 
00166    INIT_IMARR(imar) ;
00167    ADDTO_IMARR(imar,rim) ; ADDTO_IMARR(imar,gim) ; ADDTO_IMARR(imar,bim) ;
00168 
00169    RETURN( imar );
00170 }
 | 
| 
 | 
| 
 Definition at line 112 of file mri_to_rgb.c. References ADDTO_IMARR, ENTRY, INIT_IMARR, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_FLOAT_PTR, mri_new_conforming, MRI_IMAGE::nvox, and RETURN. Referenced by mri_warp3D_cubic(), mri_warp3D_linear(), mri_warp3D_NN(), mri_warp3D_quintic(), mri_warp_bicubic(), and NUD_rotate(). 
 00113 {
00114    MRI_IMARR * imar ;
00115    MRI_IMAGE * rim , * gim , * bim ;
00116    float     * rr  , * gg  , * bb  ;
00117    byte      * rgb ;
00118    int ii , npix ;
00119 
00120 ENTRY("mri_rgb_to_3float") ;
00121 
00122    if( oldim == NULL || oldim->kind != MRI_rgb ) RETURN( NULL );
00123 
00124    rim = mri_new_conforming( oldim , MRI_float ) ; rr = MRI_FLOAT_PTR(rim) ;
00125    gim = mri_new_conforming( oldim , MRI_float ) ; gg = MRI_FLOAT_PTR(gim) ;
00126    bim = mri_new_conforming( oldim , MRI_float ) ; bb = MRI_FLOAT_PTR(bim) ;
00127                                                    rgb= MRI_BYTE_PTR(oldim) ;
00128    npix = oldim->nvox ;
00129 
00130    for( ii=0 ; ii < npix ; ii++ ){
00131       rr[ii] = rgb[3*ii  ] ;
00132       gg[ii] = rgb[3*ii+1] ;
00133       bb[ii] = rgb[3*ii+2] ;
00134    }
00135 
00136    INIT_IMARR(imar) ;
00137    ADDTO_IMARR(imar,rim) ; ADDTO_IMARR(imar,gim) ; ADDTO_IMARR(imar,bim) ;
00138 
00139    RETURN( imar );
00140 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 174 of file mri_to_rgb.c. References ENTRY, far, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_COPY_AUX, MRI_FLOAT_PTR, mri_free(), mri_new_conforming, mri_sharpen(), mri_to_float(), MRI_IMAGE::nvox, and RETURN. Referenced by ISQ_process_mri(). 
 00175 {
00176    MRI_IMAGE * flim , * shim , * newim ;
00177    byte  * iar , * nar ;
00178    float * sar , * far ;
00179    int ii , nvox , rr,gg,bb ;
00180    float fac ;
00181 
00182 ENTRY("mri_sharpen_rgb") ;
00183 
00184    if( im == NULL ) RETURN( NULL );
00185 
00186    if( im->kind != MRI_rgb ) RETURN( mri_sharpen(phi,0,im) );
00187 
00188    flim  = mri_to_float( im ) ;                  /* intensity of input */
00189    shim  = mri_sharpen( phi , 0 , flim ) ;       /* sharpen intensity */
00190    newim = mri_new_conforming( im , MRI_rgb ) ;  /* will be output    */
00191 
00192    nar = MRI_BYTE_PTR(newim) ; iar = MRI_BYTE_PTR(im) ;
00193    far = MRI_FLOAT_PTR(flim) ; sar = MRI_FLOAT_PTR(shim) ;
00194 
00195    nvox = newim->nvox ;
00196    for( ii=0 ; ii < nvox ; ii++ ){
00197       if( far[ii] <= 0.0 || sar[ii] <= 0.0 ){
00198          nar[3*ii] = nar[3*ii+1] = nar[3*ii+2] = 0 ;
00199       } else {
00200          fac = sar[ii] / far[ii] ; /* will be positive */
00201          rr  = fac * iar[3*ii]   ;
00202          gg  = fac * iar[3*ii+1] ;
00203          bb  = fac * iar[3*ii+2] ;
00204          nar[3*ii  ] = (rr > 255) ? 255 : rr ;
00205          nar[3*ii+1] = (gg > 255) ? 255 : gg ;
00206          nar[3*ii+2] = (bb > 255) ? 255 : bb ;
00207       }
00208    }
00209 
00210    mri_free(flim) ; mri_free(shim) ;
00211 
00212    MRI_COPY_AUX(newim,im) ;
00213    RETURN( newim );
00214 }
 | 
| 
 | 
| 
 Definition at line 11 of file mri_to_rgb.c. References rgba::b, MRI_DATA::byte_data, ENTRY, MRI_DATA::float_data, rgba::g, MRI_IMAGE::im, MRI_IMAGE::kind, MRI_COPY_AUX, mri_new_conforming, MRI_RGB_PTR, MRI_IMAGE::nvox, rgba::r, RETURN, MRI_DATA::rgba_data, and MRI_DATA::short_data. Referenced by AIVVV_imseq_getim(), ISQ_make_image(), ISQ_make_montage(), ISQ_record_getim(), main(), mri_overlay_2D(), mri_to_mri(), mri_write_angif(), PLUTO_imseq_getim(), RCREND_imseq_getim(), REND_imseq_getim(), and T3D_read_images(). 
 00012 {
00013    MRI_IMAGE *newim ;
00014    register int ii , npix ;
00015    register byte * rgb ;
00016 
00017 ENTRY("mri_to_rgb") ;
00018 
00019    if( oldim == NULL ) RETURN( NULL );
00020 
00021    newim = mri_new_conforming( oldim , MRI_rgb ) ; rgb = MRI_RGB_PTR(newim) ;
00022    npix  = oldim->nvox ;
00023 
00024    switch( oldim->kind ){
00025 
00026       case MRI_byte:
00027          for( ii=0 ; ii < npix ; ii++ )
00028             rgb[3*ii] = rgb[3*ii+1] = rgb[3*ii+2] = oldim->im.byte_data[ii] ;
00029       break ;
00030 
00031       case MRI_float:
00032          for( ii=0 ; ii < npix ; ii++ )
00033             rgb[3*ii] = rgb[3*ii+1] = rgb[3*ii+2] = oldim->im.float_data[ii] ;
00034       break ;
00035 
00036       case MRI_short:
00037          for( ii=0 ; ii < npix ; ii++ )
00038             rgb[3*ii] = rgb[3*ii+1] = rgb[3*ii+2] = oldim->im.short_data[ii] ;
00039       break ;
00040 
00041       case MRI_rgb:
00042          memcpy( rgb , MRI_RGB_PTR(oldim) , 3*npix ) ;
00043       break ;
00044 
00045       case MRI_rgba:
00046          for( ii=0 ; ii < npix ; ii++ ){
00047             rgb[3*ii]   = oldim->im.rgba_data[ii].r ;
00048             rgb[3*ii+1] = oldim->im.rgba_data[ii].g ;
00049             rgb[3*ii+2] = oldim->im.rgba_data[ii].b ;
00050          }
00051       break ;
00052 
00053       default:
00054          fprintf(stderr,"mri_to_rgb:  unrecognized image conversion %d\n",oldim->kind) ;
00055          RETURN( NULL );
00056    }
00057 
00058    MRI_COPY_AUX(newim,oldim) ;
00059    RETURN( newim );
00060 }
 | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  