A Practical Compression Algorithm of the X Ray Images
Zhou LihuaWang Shidi
(Computer Center, Chongqing University of Medical Science, Chongqing400016)
AbstractThe 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 wordsCompression algorithmPixelR,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 1A X ray image before compression
图2解压后的X射线图像
Fig 2The X ray image after decompression
5程序实现
下面是在Windows 98中,采用24位真彩色,
用Visual C++6.0编制的压缩Compressor() 和解压Decompressor()的函数程序段:
LONG WINAPICompressor(HDC hDC, LPSTR Fn, LONG w, LONG h)
{FILEFp;
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<SizBuf;k+=3)
{
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 WINAPIDecompressor(HDC hDC,LPSTR Fn, LONG w, LONG h)
{FILEFp;
LONGkp=SizPic-1;
LONGPicW=w;
LONGPicH=h;
LONGSizBuf=wh3;
LPBYTEBuff;
HANDLEhMem;
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)
