Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

mri_to_rgb.c File Reference

#include "mrilib.h"

Go to the source code of this file.


Functions

MRI_IMAGEmri_to_rgb (MRI_IMAGE *oldim)
MRI_IMAGEmri_3to_rgb (MRI_IMAGE *rim, MRI_IMAGE *gim, MRI_IMAGE *bim)
MRI_IMARRmri_rgb_to_3float (MRI_IMAGE *oldim)
MRI_IMARRmri_rgb_to_3byte (MRI_IMAGE *oldim)
MRI_IMAGEmri_sharpen_rgb (float phi, MRI_IMAGE *im)
MRI_IMAGEmri_flatten_rgb (MRI_IMAGE *im)
void mri_invert_inplace (MRI_IMAGE *im)

Function Documentation

MRI_IMAGE* mri_3to_rgb MRI_IMAGE   rim,
MRI_IMAGE   gim,
MRI_IMAGE   bim
 

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 }

MRI_IMAGE* mri_flatten_rgb MRI_IMAGE   im
 

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 }

void mri_invert_inplace MRI_IMAGE   im
 

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 }

MRI_IMARR* mri_rgb_to_3byte MRI_IMAGE   oldim
 

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 }

MRI_IMARR* mri_rgb_to_3float MRI_IMAGE   oldim
 

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 }

MRI_IMAGE* mri_sharpen_rgb float    phi,
MRI_IMAGE   im
 

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 }

MRI_IMAGE* mri_to_rgb MRI_IMAGE   oldim
 

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 }
 

Powered by Plone

This site conforms to the following standards: