MUSICA(多尺度图像对比度增强)算法的VC实现-2[r]

    程序源码下载:IPLab_MUSICA.rar

    整体的流程还是比较简单的,问题是图像处理中的一些细节,例如滤波时边界的处理,图像抽样时w或者h为奇数时w/2(h/2)的取值,也就是离散整数的取整误差问题。还有些编程时内存分配的问题,临时缓存的分配等。但是不考虑得太复杂都使用最常用的方式,以上仅将大概的问题列出,碰到时候需要注意。
    入口函数伪代码:
void GDIPlusImage::IPFuncMUSICA()
{
    O = 原始图像;

    for(分解级数)
      {计算每级的长宽保存到矩阵S;}

    ImageGrey24To8(O);//灰度化,仅对灰度图象进行处理

    X = MUSICA_Decomposition(O,S);//分解,得到X为所有的图像按S里的顺序排列,30

    X = MUSICA_Mapping(X,S);//对分解图像进行变换,32

    O = MUSICA_Reconstruction(X,S);//重构,得到增强后的图像,34

    ImageGrey8To24(O);//转化成24为图,显示、后继处理起来方便,仅此而已
}

    MUSICA_Mapping(X,S)函数相对简单,只需要对S中的残差距阵进行灰度级的查表替换,替换的表根据s型函数事先构造好,其过程类似进行反色处理,可以参考前面的文章。可以考虑将替换表的构造独立出来,通过参数传递,方便改进。

    MUSICA_Decomposition分解和MUSICA_Reconstruction重构过程相对复杂,而且专利文档中提供了几种改进后的分解重构过程。对于编程实现来说其实本质都相通,因此所附程序中实现了专利文档中的4.a和4.b,也就是最简单的一种。仅对4.a分解的实现进行说明,4.c重构为逆过程,参考源代码。

图5

    一次分解流程:
1) 对X进行一级分解,X拷贝到buffer
2) 对buffer进行平滑滤波
3) buffer隔行抽样得到下一级的近似图X+1
4) 近似图X+1隔行插值0到buffer
5) 进行滤波参数乘4(对置0行列的补偿)的平滑滤波
6) X减去平滑后的buffer得到残差图像保存于X

    这样就完成一次分解,然后再对X+1进行下一级的分解。


图6

    所附程序在xp+vs.net2003下编译运行通过,程序运行后打开工程目录下的图片,点击快捷按钮1或者菜单项“图像处理-〉MUSICA”,然后要稍等一会,处理速度比较慢。工程目录下有两张示例图片,“心脏-交响乐处理前.jpg”为原始成像图片,“心脏-交响乐处理后.jpg”是一位老师给我的在专业设备上处理过后的结果图,作为和程序运行结果的比较。当然,程序运行的结果比它差很多,但是基本方向是对的,专利文档里还有很多改进的步骤和参数的择优都未实现,有兴趣的朋友自己动手。:)

posted @ 2006-07-13 20:21  lu xu  阅读(3837)  评论(0编辑  收藏  举报