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