源码链接:skeleton.cpp
一、实验要求
附件是人体骨骼核扫描图像,我们的目的是通过图像锐化突出骨骼的更多细节来增强图像。图像灰度的动态范围很窄并且有很高的噪声内容。
二、实验内容
按照课本冈萨雷斯的《数字图像处理》上面的思路,整个处理过程应该是先使用拉普拉斯变换进行图像处理,可以突出图像中的细节部分;接着使用sobel梯度法,突出骨骼的边界;再用盒滤波器进行平滑处理,平滑后的图像可以用来掩盖拉普拉斯图像。这样就实现了锐化处理。最后使用灰度变换来增强图像灰度动态范围。输出图像即可。
拉普拉斯变换:
这里通过定义一个滤波器核,使用模板为[1,1,1;1,-8,1;1,1,1]的滤波器对原图像进行拉普拉斯操作,然后对输入图像进行操作并将结果存储在laplas中。这里定义了一个tubeone函数,主要功能是通过取出图像的上下限来锐化图像。这样子就可以显示出骨骼图的拉普拉斯变换。
下面进行sobel梯度处理:
使用blur函数进行平滑处理:这里使用5*5均值滤波:
前面相加的图与滤波图相乘:
接着将上面相乘后的图与原图相加,并锐化:
最后一步,对图像进行幂律伽马变换,得到最终的结果图。
这里的伽马变换定义了一个函数gammaTran:
最终结果:
原图:
拉普拉斯变换:
前两张图相加:
Sobel梯度处理:
Smooth平滑处理:5*5均值滤波
前面相加的图与滤波图相乘:
原图与上图求和的锐化:
幂律变换:
三、实验收获
1、实验遇到的问题及难点
这次实验难点集中在处理问题的方式上。需要认真听课并理解每一步操作是都有什么样的作用,可以带来什么样的效果,这样才能找到解决问题的正确的步骤,最终得到一个较好的结果。而且实验中还需要进行多次的试错,在每一次的参数调整中找到最合适的变量(这一步也需要对原理有较为熟悉的掌握,了解其数学意义后才能有试错的方向)。最终还要对opencv有一定的了解,在对每个函数的功能及使用方法了解后才能正确的使用。
2、实验总结
又一次通过的opencv解决了图片处理的问题。之前只知道有类似于锐化这种处理方法,但经过这次实验才是真真正正明白了锐化处理的整个内部过程及原理,不仅仅是电脑端处理图片更加精确了,好像在手机上处理图片时对于每个参数的调整范围都更加明白了。这才是学习与生活并行。