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 }
|