一种实用的X射线灰度图像的压缩算法
作者:周丽华 王世迪
单位:(重庆医科大学 计算机室,重庆 400016)
关键词:压缩算法;象素;R,G,B值
生物医学工程学杂志000233 摘要 以医用X射线灰度图像为例,介绍基于象素R ,G,B值的无损压缩算法在X射线图像分析系统中的应用。通过对X射线灰度图像特征、象素 的R,G,B值、压缩等各个环节的设计与描述,完整地给出了该算法的实现过程。
A Practical Compression Algorithm of the X Ray Images
Zhou Lihua Wang Shidi
(Computer Center, Chongqing University of Medical Science, Chongqing 400016)
, 百拇医药
Abstract The application of a lossless compressioin algori thm, based on the R,G,B value of pixel, to a X ray analyzing system is introduc ed through some medical examples of the X Ray image. The realization of the algo r ithm is completely presented, based on the design and the description of the cha racteristics, the R,G,B value of the pixed and the lossless compression methods of the X ray images.
Key words Compression algorithm Pixel R,G,B value
, 百拇医药
1 前 言
现代医学实验起源于解剖学,它是整个现代医学的基础,解剖学的可视性使医学的真实性、 可靠性和人们的研究热情大大提高,现代医学的发展是多学科努力的结果,但医学可视化始 终 是人们不懈追求的目标。100年前,德国人伦琴发现了X射线,由此开创了医学放射学的先河 , 此后,出现了各种的针对不同用途的X射线设备、体层摄影用X射线设备及特殊检查用X射线 设备等,这些设备均可与计算机技术相结合,计算机可通过数据采集卡从这些设备把原始X 线图像调入计算机,显示在计算机的显示屏上,并可将采入图像保存在计算机的存贮器中, 这样可反复调用和长期有效的保存,但是,由于计算机中保存图像需要用较大的存贮空间, 所以给其更为普遍的应用和在网上传输带来不便,基于此因,我们通过大量临床实践的验证 ,实现了一种即简单快捷又实用可行的X射线灰度图像无损压缩算法。
2 图像显示
在计算机中,要显示图像,就必须将其图像信息放入显示内存中,然后才能在计算机的显示 器上显示出来,而显示器是通过每个发光点(象素)的点阵方式来显示的,每个象素的色彩 由R(红色)值、G(绿色)值和B(蓝色)值来决定,所以保存在计算机中的图像须保存其每个象 素点的R,G,B值,随着显示分辨率的增加,保存在计算机中图像的容量也会增加。
, 百拇医药
3 图像压缩算法
3.1 压缩
由于在显示器上显示图像的色彩用R,G,B值来表示,当R值=G值=B值时,其图像为灰度图像 ,基于此原理,由于X射线图像是灰度图像,所以我们将X射线图像每个象素的R,G,B值从 内存中取出,求其R,G,B三数的平均值(用M表示):
M=(R+G+B)/3
再把每个象素点的M值组成一个无损压缩文件存入磁盘,这样在磁盘中的压缩文件的大小就 会减少,以这样的方式存贮文件可节省存贮空间,以这样的方式传输文件可以提高传输速 度。
3.2 解压
从磁盘上调入压缩文件,只要将压缩文件中的每个M值分别放入显示内存对应的R,G,B值, 即可实现解压,在临床实践中效果非常好。
, 百拇医药
4 一个实例
下面给出一个X射线灰度图像压缩实例,如果不采用任何压缩方法其图像文件的长度为1301K bytes,见图1。如果采用第三节所用方法进行无损压缩,则压缩后的图像文件长度为432K bytes,其解压恢复后的图像,见图2。
图1 压缩前的X射线图像
Fig 1 A X ray image before compression
图2 解压后的X射线图像
Fig 2 The X ray image after decompression
, http://www.100md.com
5 程序实现
下面是在Windows 98中,采用24位真彩色,用Visual C++6.0编制的压缩Compressor() 和解压Decompressor()的函数程序段:
LONG WINAPI Compressor(HDC hDC, LPSTR Fn, LONG w, LONG h)
{ FILE Fp;
LONGPicW=w;
LONGPicH=h;
LONGSizBuf=wh3;
LPBYTEBuff;
HANDLEhMem;
, 百拇医药
HBITMAPhBmp;
HDChDCp;
LONGk;
BYTER,G,B
Hmem = GlobalAlloc(GMEM-FIXED,SizBuf);
Buff=(LPBYTE)GlobalLock(hMem);
HDCp=CreateCompatibleDC(hDC);
HBmp=CreateCompatibleBitmap(hDC,PicW,PicH);SelectObject(hDCp,h Bmp);
BitBlt(hDCp,0,0,PicW,PicH,hDC,0,0,SRCCOPY);
, 百拇医药
GetBitmapBits(hBmp,SizBuf,Buff);
for(k=0;k
{
B=(Buff+k);G=(Buff+k+1);B=(Buff+k+2);
(Buff+kp)=(B+G+R)/3; kp++;
}
if((Fp=fopen(Fn,"wb"))!=NULL){z=fwrite(Buff,PicW;PicH,Fp);fclose(Fp);}
GlobalUnlock(hMem);GlobalFree(hMem); DeleteDC(hDCp);DeleteObject(hBmp);
, 百拇医药
return ();
}
LONG WINAPI Decompressor(HDC hDC,LPSTR Fn, LONG w, LONG h)
{ FILE Fp;
LONGkp=SizPic-1;
LONGPicW=w;
LONGPicH=h;
LONGSizBuf=wh3;
LPBYTEBuff;
HANDLEhMem;
, http://www.100md.com
HBITMAPhBmp;
HDChDCp;
LONGk;
BYTER,G,B;
HMem = GlobalAlloc(GMEM-FIXED,SizBuff);
Buff=(LPBYTE)GlobalLock(hMem);
HDCp=CreateCompatibleDC(hDC);
hBmp=CreateCompatibleBitmap(hDC,PicW,PicH);
SelectObject(hDCP,hBmp);
, 百拇医药
if((Fp=fopen(Fn,"rb"))!=NULL)
{
z=fread(Buff,PicW,PicH,Fp);fclose(Fp);
for(k=SizBuf-3;k>=0;k-=3)
{
B=(Buff+kp);G=B;R=B;kp-;
(Buff+k)=B;(Buff+k+1)=G;(Buff+k+2)=R;
}
}
SetBitmapBits(hBmp,SizBuf,Buff);
, 百拇医药
BitBlt(hDC,0,0,PicW,PicH,hDCp,0,0,SRCCOPY);
GlobalUnlock(hMem);GlobalFree(hMem); DeleteDC(hDCp);DeleteObject(hBmp);
return();
}
6 结束语
以上给出的是一种算法简单、实现容易、处理速度快的无损压缩算法,可广泛应用于黑白B 超图像、MRI(磁共振成像术)、PET(正电子发射断层扫描技术)等其它灰度图像的压缩存贮。
参考文献
1,陈鹤声.医用影像设备学,人民卫生出版社,1998∶102~398
2,程文斌,金相凤.Visual C++实用大全,北京航空航天大学出版社,1995 年,601~629
3,[美]Clayton Walnum著,齐舒创作室译.Windows98编程核心技术精解, 中国水利水电出版社,1998∶83~100
(收稿:1999-12-23), 百拇医药
单位:(重庆医科大学 计算机室,重庆 400016)
关键词:压缩算法;象素;R,G,B值
生物医学工程学杂志000233 摘要 以医用X射线灰度图像为例,介绍基于象素R ,G,B值的无损压缩算法在X射线图像分析系统中的应用。通过对X射线灰度图像特征、象素 的R,G,B值、压缩等各个环节的设计与描述,完整地给出了该算法的实现过程。
A Practical Compression Algorithm of the X Ray Images
Zhou Lihua Wang Shidi
(Computer Center, Chongqing University of Medical Science, Chongqing 400016)
, 百拇医药
Abstract The application of a lossless compressioin algori thm, based on the R,G,B value of pixel, to a X ray analyzing system is introduc ed through some medical examples of the X Ray image. The realization of the algo r ithm is completely presented, based on the design and the description of the cha racteristics, the R,G,B value of the pixed and the lossless compression methods of the X ray images.
Key words Compression algorithm Pixel R,G,B value
, 百拇医药
1 前 言
现代医学实验起源于解剖学,它是整个现代医学的基础,解剖学的可视性使医学的真实性、 可靠性和人们的研究热情大大提高,现代医学的发展是多学科努力的结果,但医学可视化始 终 是人们不懈追求的目标。100年前,德国人伦琴发现了X射线,由此开创了医学放射学的先河 , 此后,出现了各种的针对不同用途的X射线设备、体层摄影用X射线设备及特殊检查用X射线 设备等,这些设备均可与计算机技术相结合,计算机可通过数据采集卡从这些设备把原始X 线图像调入计算机,显示在计算机的显示屏上,并可将采入图像保存在计算机的存贮器中, 这样可反复调用和长期有效的保存,但是,由于计算机中保存图像需要用较大的存贮空间, 所以给其更为普遍的应用和在网上传输带来不便,基于此因,我们通过大量临床实践的验证 ,实现了一种即简单快捷又实用可行的X射线灰度图像无损压缩算法。
2 图像显示
在计算机中,要显示图像,就必须将其图像信息放入显示内存中,然后才能在计算机的显示 器上显示出来,而显示器是通过每个发光点(象素)的点阵方式来显示的,每个象素的色彩 由R(红色)值、G(绿色)值和B(蓝色)值来决定,所以保存在计算机中的图像须保存其每个象 素点的R,G,B值,随着显示分辨率的增加,保存在计算机中图像的容量也会增加。
, 百拇医药
3 图像压缩算法
3.1 压缩
由于在显示器上显示图像的色彩用R,G,B值来表示,当R值=G值=B值时,其图像为灰度图像 ,基于此原理,由于X射线图像是灰度图像,所以我们将X射线图像每个象素的R,G,B值从 内存中取出,求其R,G,B三数的平均值(用M表示):
M=(R+G+B)/3
再把每个象素点的M值组成一个无损压缩文件存入磁盘,这样在磁盘中的压缩文件的大小就 会减少,以这样的方式存贮文件可节省存贮空间,以这样的方式传输文件可以提高传输速 度。
3.2 解压
从磁盘上调入压缩文件,只要将压缩文件中的每个M值分别放入显示内存对应的R,G,B值, 即可实现解压,在临床实践中效果非常好。
, 百拇医药
4 一个实例
下面给出一个X射线灰度图像压缩实例,如果不采用任何压缩方法其图像文件的长度为1301K bytes,见图1。如果采用第三节所用方法进行无损压缩,则压缩后的图像文件长度为432K bytes,其解压恢复后的图像,见图2。
图1 压缩前的X射线图像
Fig 1 A X ray image before compression
图2 解压后的X射线图像
Fig 2 The X ray image after decompression
, http://www.100md.com
5 程序实现
下面是在Windows 98中,采用24位真彩色,用Visual C++6.0编制的压缩Compressor() 和解压Decompressor()的函数程序段:
LONG WINAPI Compressor(HDC hDC, LPSTR Fn, LONG w, LONG h)
{ FILE Fp;
LONGPicW=w;
LONGPicH=h;
LONGSizBuf=wh3;
LPBYTEBuff;
HANDLEhMem;
, 百拇医药
HBITMAPhBmp;
HDChDCp;
LONGk;
BYTER,G,B
Hmem = GlobalAlloc(GMEM-FIXED,SizBuf);
Buff=(LPBYTE)GlobalLock(hMem);
HDCp=CreateCompatibleDC(hDC);
HBmp=CreateCompatibleBitmap(hDC,PicW,PicH);SelectObject(hDCp,h Bmp);
BitBlt(hDCp,0,0,PicW,PicH,hDC,0,0,SRCCOPY);
, 百拇医药
GetBitmapBits(hBmp,SizBuf,Buff);
for(k=0;k
{
B=(Buff+k);G=(Buff+k+1);B=(Buff+k+2);
(Buff+kp)=(B+G+R)/3; kp++;
}
if((Fp=fopen(Fn,"wb"))!=NULL){z=fwrite(Buff,PicW;PicH,Fp);fclose(Fp);}
GlobalUnlock(hMem);GlobalFree(hMem); DeleteDC(hDCp);DeleteObject(hBmp);
, 百拇医药
return ();
}
LONG WINAPI Decompressor(HDC hDC,LPSTR Fn, LONG w, LONG h)
{ FILE Fp;
LONGkp=SizPic-1;
LONGPicW=w;
LONGPicH=h;
LONGSizBuf=wh3;
LPBYTEBuff;
HANDLEhMem;
, http://www.100md.com
HBITMAPhBmp;
HDChDCp;
LONGk;
BYTER,G,B;
HMem = GlobalAlloc(GMEM-FIXED,SizBuff);
Buff=(LPBYTE)GlobalLock(hMem);
HDCp=CreateCompatibleDC(hDC);
hBmp=CreateCompatibleBitmap(hDC,PicW,PicH);
SelectObject(hDCP,hBmp);
, 百拇医药
if((Fp=fopen(Fn,"rb"))!=NULL)
{
z=fread(Buff,PicW,PicH,Fp);fclose(Fp);
for(k=SizBuf-3;k>=0;k-=3)
{
B=(Buff+kp);G=B;R=B;kp-;
(Buff+k)=B;(Buff+k+1)=G;(Buff+k+2)=R;
}
}
SetBitmapBits(hBmp,SizBuf,Buff);
, 百拇医药
BitBlt(hDC,0,0,PicW,PicH,hDCp,0,0,SRCCOPY);
GlobalUnlock(hMem);GlobalFree(hMem); DeleteDC(hDCp);DeleteObject(hBmp);
return();
}
6 结束语
以上给出的是一种算法简单、实现容易、处理速度快的无损压缩算法,可广泛应用于黑白B 超图像、MRI(磁共振成像术)、PET(正电子发射断层扫描技术)等其它灰度图像的压缩存贮。
参考文献
1,陈鹤声.医用影像设备学,人民卫生出版社,1998∶102~398
2,程文斌,金相凤.Visual C++实用大全,北京航空航天大学出版社,1995 年,601~629
3,[美]Clayton Walnum著,齐舒创作室译.Windows98编程核心技术精解, 中国水利水电出版社,1998∶83~100
(收稿:1999-12-23), 百拇医药