引子

刚开始看冈萨雷斯的《数字图像处理》时,3.7节 混合空间增强法中图3.4.3中的全身骨骼图的印象非常深刻。牛XX啊,这么模糊,都能变得这么清楚。虽然书中也给出了大段大段的解释,但是能力实在有限,又是自学的,看得云里雾里,反正不明觉厉就是了。但是这个也一直留在脑中了,希望自己也能实现出来。

以下是参考书中的步骤,以及个人一些粗糙的理解,小试牛刀,欢迎大家拍砖以斧正。感谢~

【注】由于笔记本的屏幕不够大,所以截图没能截取完整,比如骨骼图中的脚就基本截断没有了。望见谅。


概述

先看看原图及一段细节图:
原图

截取原图的一段细节,并放大了看。

细节

由于是扫描图,可以看到骨骼周围有很多噪点,而骨骼本身以及红圈中的病变并不十分突出,看起来比较模糊。处理的目的是为了突出骨骼及病变部分。采用的是结合 拉普拉斯均值模糊sobel梯度,以及 图像的逻辑操作

最终效果对比:

对于这个截图,我真是尽力了。o(╥﹏╥)o。屏幕太小了,如果做缩放,也会有损图像的质量。这个对比图是缩放之后的,将就看。有兴趣的,代码跑一遍,就很直观地看到对比效果啦。


步骤及效果分析

一、 先对原图做拉普拉斯处理,得图b
拉普拉斯卷积核:3*3
-1,-1, -1
-1, 8,-1
-1,-1,-1
原图拉普拉斯之后,得图b。

【ps】:

  1. 书中图b做了标定,即为了便于显示,则将灰度值为0的部分标定为127(大概),这样看起来背景是灰色的。灰色背景相比黑色背景更能凸显出白色前景部分,更便于观察。
  2. opencv中使用laplace卷积核做卷积操作,调用filter2D函数,想要得到灰色背景图,则需要将filter2D的第六个参数delta设置为127即可。
  3. 这里没有直接使用opencv提供的Laplacian,而是调用filter2D接口。因为这里用到的卷积核与opencv中提供的Laplacian接口的卷积核不一致,所以需要自定义一个卷积核。

二、 拉普拉斯叠加到原图,得图c


左图原图右图是拉普拉斯叠加到原图的锐化图像

将拉普拉斯结果叠加到原图,得到锐化后的图像。即在原图的基础上,突出的边缘。对比原图观察,可以看到,叠加锐化之后的图像,确实更突显了骨骼轮廓,但同时也骨骼周围的噪点也得到了放大,干扰仍然太多,效果不十分理想。

【ps】:

  1. 上一步中,为了便于观察,突显拉普拉斯的效果,将背景标定为灰色。若想要得到图c的黑色背景,则需要将filter2D的第六个参数delta设置为0。

三、 将原图进行Sobel梯度处理,得图d

左图图b拉普拉斯提取的边缘,右图原图的sobel梯度图d
sobel卷积核:
x方向梯度
-1,-2, -1
0, 0, 0
1, 2, 1

y方向梯度
-1, 0, 1
-2, 0, 2
-1, 0, 1

sobel是一阶导数,laplace是二阶导数,但sobel会有个轻微的高斯模糊的效果,能少量的抑制噪点。对比可以看到,sobel虽然能抑制噪声,但是效果不好,骨骼周围仍存在大量噪点,并在sobel梯度的作用下放大了出来。

四、 对原图使用均值滤波后Sobel,得图e

左图图d直接对原图进行sobel梯度,右图是图e先平滑再sobel。
先采用5*5的均值滤波器,模糊图像,消除噪点,再用sobel梯度,获取模糊后的边缘。

对比观察,相比对原图直接sobel,用5*5均值模糊后,再sobel,骨骼周围的噪点明显少了不少,骨骼的大致轮廓也保留住了,但是骨骼的细节还是有所丢失。这个步骤,对于噪声的抑制起到了很好的作用。

五、 综合拉普拉斯和sobel的效果,得图f

左图图b原图直接拉普拉斯提取边缘,中图是图d原图直接sobel,右图是图f原图先平滑再sobel,再与laplace效果合并得出的综合效果图。

对比观察,图f相比图b和图d,在5*5均值滤波的作用下不仅有效的抑制了骨骼周围的噪点,在sobel梯度的效果下,提取了主要的骨骼轮廓,在laplace的作用下,保留了骨骼的细节。

【ps】
这里,书中该步骤的原话是:由图c和图e相乘形成的掩蔽图像。
实际在opencv中把图c和图e做了一个与操作,提取了图c和图e的相同部分。我是这么理解的,以图e为mask,提取图c中的mask对应的部分,获取骨骼的轮廓细节。图c是拉普拉斯锐化后的效果,它增强了边缘细节,图c是滤除了骨骼周围噪点的大致骨骼框架,但图c丢失了骨骼的细节,综合两图,取两图的长处。从而获得了增强的骨骼框架,只要骨骼,不要噪点,或者尽可能少要噪点,这样的效果就比较理想了。
六、 图f叠加到原图,得g

左图图a原图,中图是图c原图叠加laplace,右图是图g原图叠加混合增强。

对比观察,中图laplace锐化后的图像,虽然骨骼也增强了,但骨骼周围的噪点也放大了,干扰仍很多,右图是混合增强的效果,可以看出,骨骼被明显突出了很多,骨骼周围的噪点相比而言,看起来就不那么影响视觉了。

至此,就基本实现了混合增强。

七、对图g再微做调整,得图h


左图图a原图,中图是图h

书中的最后一步是对图g采用了幂律变换,目的是为了增强图像。我这里是对图g做了个简单的自加,也是个增强,就没做幂律变换了。毕竟这个图的处理步骤的主要难点在于混合增强的理解。

对比观察,混合增强之后的最终效果图,相比原图a最终效果非常好,骨骼以及一些病变都有效的凸显出来,大致轮廓都存在,更便于图像的观察。

基于opencv3.4.3的具体代码如下:

    //卷积核:laplace锐化Mat kernel_laplace = (Mat_<char>(3, 3) << -1, -1, -1, -1, 8, -1, -1, -1, -1);filter2D(src, laplace, CV_8U, kernel_laplace);imshow("b_laplace", laplace);//原图与laplace锐化结果相加得图c,突出边缘add(src, laplace, laplaceAddsrc);imshow("c_added", laplaceAddsrc);//计算原图的Sobel梯度,得图dMat  sobel, gx, gy;Sobel(src, gx, CV_8U, 1, 0, 3, 1.0, 0.0, BORDER_DEFAULT);Sobel(src, gy, CV_8U, 0, 1, 3, 1.0, 0.0, BORDER_DEFAULT);convertScaleAbs(gx, gx);convertScaleAbs(gy, gy);add(gx, gy, sobel);convertScaleAbs(sobel, sobel);imshow("d_sobel", sobel);//5*5的均值滤波,模糊原图Mat blured, blur_sobel,multy;blur(src, blured, Size(5, 5), Point(-1, -1));Sobel(blured, gx, CV_8U, 1, 0, 3, 1.0, 0.0, BORDER_DEFAULT);Sobel(blured, gy, CV_8U, 0, 1, 3, 1.0, 0.0, BORDER_DEFAULT);convertScaleAbs(gx, gx);convertScaleAbs(gy, gy);add(gx, gy, blur_sobel);imshow("e_sobelAfterBlur", blur_sobel);//与操作Mat f, g;bitwise_and(laplaceAddsrc, blur_sobel, f);imshow("f", f);add(src, f, g);imshow("g", g);//效果图,自加一次,增强。冈萨雷斯里面是做幂律变换,我没做,只是做了个简单的增强,看着玩。add(g, g,g);imshow("h", g);

代码及原图下载链接如下:
https://download.csdn.net/download/xiaosha00000/10834295

【ps】

  1. 若下载代码的话,记得改一下图片路径,我没做图片是否为空的判断,直接运行,图片路径不对的话,会报错的。
  2. 由于图像中存在的概念和术语太多,自己也难免存在滥用的情况,若有使用不当,从而造成误解的地方,恳请大家指出。

数字图像处理-3.7混合空间增强法-骨骼图 基于opencv3.4.3的实现相关推荐

  1. 《数字图像处理》学习笔记(四)--混合空间增强法(待修改)

    这次试验问题很多,应该还是数据格式的问题,先发上来吧,放假回去先用Matlab做下,再改改..... 下面对一幅人体骨骼扫描图进行混合空间增强(有点吓人)...我们的目标是通过图像锐化突出骨骼的更多细 ...

  2. 小练习:基于混合空间增强法对全身骨骼扫描图像进行图像增强

    简述:为刚雷克斯<数字图像处理>中全身骨骼扫描图图像增强过程的实现 import cv2 as cv import matplotlib.pyplot as plt import nump ...

  3. 数字图像处理- 3.6 锐化空间滤波器

    3.6 锐化空间滤波器 锐化处理的主要目的是突出图像中的突出灰度的过度部分.总的来说,微分算子的响应强度与图像在该店(应用了算子)的突变程度有关.这样一来,图像微分增强了边缘和其他突变(如噪声)并削弱 ...

  4. 图片的混合空间增强操作Opencv-python实现

    基于Opencv-python的图片混合空间增强操作 文章目录 基于Opencv-python的图片混合空间增强操作 前言 一.混合空间增强操作流程图 二.python代码实现操作 三.效果图 前言 ...

  5. 图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)

    相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...

  6. 数字图像处理——第三章 空间域图像增强(空间滤波)

    文章目录 1. 空间滤波基础 2. 线性滤波器 2.1 平滑空间滤波器 2.2 锐化空间滤波器 2.2.1 基于一阶微分的图像增强--梯度法 2.2.2 基于二阶微分的图像增强--拉普拉斯算子 3. ...

  7. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...

  8. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释...

           本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含 ...

  9. 数字图像处理——第三章 空间域图像增强(灰度变换和直方图处理)

    文章目录 空间域图像增强 1. 背景知识 2. 基本灰度变换 2.1 图像反转 2.2 对数变换 2.3 幂次变换 2.4 分段线性变换函数 2.4.1 对比拉伸 2.4.2 灰度切割 2.4.3 位 ...

最新文章

  1. ES Next Arrow function Promise Iterator Generator yield Async Await
  2. stm32的PWM占空比
  3. 网络安全应急演练方案内容_开展应急演练,筑牢网络安全
  4. 好程序员Java分享SQL语言之索引
  5. [转载] java左移右移和无符号右移
  6. [ZZ]关于内存中栈和堆的区别
  7. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序
  8. Python程序中创建子进程时对环境变量的要求
  9. GitHub简单教程
  10. ffmpeg 将swf文件转 mp4
  11. 《duilib入门到精通》- duilib下载与编译(duilib视频教程)
  12. 〈西游记〉中所有插曲、主题曲
  13. 回顾2020,展望2021
  14. 光电式液位传感器和电容式液位传感器的区别
  15. 挂代理后git依然无法XXX
  16. float gpu 加速_(总结篇)使用 MATLAB GPU 加速计算|MATLAB 并行计算与分布式服务器|MATLAB技术论坛...
  17. spring实战学习(二)spEL表达式
  18. Unity3d学习笔记 var 关键字
  19. 宣布发布 .NET 7 Release Candidate 1
  20. 软考备战之计算机专业词汇

热门文章

  1. openssl pkcs8
  2. 极客学院 TensorBoard:可视化学习
  3. 2021年中国3D打印面罩市场趋势报告、技术动态创新及2027年市场预测
  4. CSS的概述、选择器
  5. Tiktok使用分享
  6. Linux输入/输出重定向
  7. 如何把视频格式转换mp4格式?试试嗨格式视频转换器
  8. hadoop搭建好后,页面访问不了
  9. 白帽子黑客零基础教程,手把手带你实现“黑客梦”
  10. 学习笔记(23):第一章: 路由与模板-Web前端技术与框架 4