前两天看到一个帖子,兴趣大增,于是把周末的闲暇时间都花在上面了
原帖地址:http://community.csdn.net/Expert/topic/4205/4205638.xml?temp=.5278589
由于csdn论坛不能贴图,而且楼主提到的AVI文件有200兆,所以只能通过QQ和楼主进行交流。楼主做的是医疗的系统,这次提出的问题是关于影像处理的。医院治疗的过程中需要向患者的血管中注射造影剂然后通过X光进行观察,并将注射的过程录制成AVI文件以便进行分析。但是X光影像中还有大片的骨骼阴影,所以很难观察血管分布。我将从原AVI文件中截取的一帧图像贴在下面,从图像中的确是很难分辨出血管的位置。
我解决这个问题的总体思路是先利用avifil32.dll中的API函数打开AVI文件,首先选定一个标准帧,接下来将AVI文件中的其他数据逐帧取出并和标准帧进行比较。比较的原则是逐像素相减,然后再把差异放大。最后再把处理后每一帧的数据写到新的AVI文件中去。
因为涉及到大量的运算,所以可以考虑使用转换矩阵的方法减少运算量。另外大量使用到DIB数据需要对图像数据的存储方式要有一定的了解。avifil32中的API只给出数据的地址指针,所以还要有一定的使用指针操作内存的技巧。
目前经过处理已经能够将血管影像突出显示出来,周边骨骼组织的阴影淡化。就差最后一步写回AVI文件的操作了,对上面那帧图像的处理效果如下图,圈出部分为凸现的血管影像。
接下来我将分帖子逐步讲解解决问题的步骤,由于我对影像处理的理论知识并不多,只是靠一些自己的想法作出这个结果的,欢迎大家共同讨论得到更好的效果