python 实现12bit灰度图像映射到8bit显示的方法


Posted in Python onJuly 08, 2019

图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在 CT 里的例子有软组织、骨头、脑组织、肺、腹部等等。

技术问题

1、显示器往往只有 8-bit, 而数据有 12- 至 16-bits。
2、如果将数据的 min 和 max 间 (dynamic range) 的之间转换到 8-bit 0-255 去,过程是个有损转换, 而且出来的图像往往突出的是些噪音。

算法分析

12-bit 到 8-bit 直接转换:

computeMinMax(pixel_val,  min,  max);  //  先算图像的最大和最小值 
for  (i  =  0;  i  <  nNumPixels;  i++) 
  disp_pixel_val[i]  =  (pixel_val[i]  -  min)*255.0/(double)(max-min);

这个算法必须有,对不少种类的图像是很有效的:如 8-bit 图像,MRI, ECT, CR 等等。

python实现

def matrix2uint8(matrix):
  ''' 
matrix must be a numpy array NXN
Returns uint8 version
  '''
  m_min= np.min(matrix)
  m_max= np.max(matrix)
  matrix = matrix-m_min
  return(np.array(np.rint( (matrix-m_min)/float(m_max-m_min) * 255.0),dtype=np.uint8))
  #np.rint, Round elements of the array to the nearest integer.
def preprocess(img, crop=True, resize=True, dsize=(224, 224)):
  if img.dtype == np.uint8:
    img = img / 255.0

  if crop:
    short_edge = min(img.shape[:2])
    yy = int((img.shape[0] - short_edge) / 2)
    xx = int((img.shape[1] - short_edge) / 2)
    crop_img = img[yy: yy + short_edge, xx: xx + short_edge]
  else:
    crop_img = img

  if resize:
    norm_img = imresize(crop_img, dsize, preserve_range=True)
  else:
    norm_img = crop_img

  return (norm_img).astype(np.float32)
def deprocess(img):
  return np.clip(img * 255, 0, 255).astype(np.uint8)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中文件操作简明介绍
Apr 13 Python
深入解析Python中的线程同步方法
Jun 14 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
Python中模块与包有相同名字的处理方法
May 05 Python
Python中常用信号signal类型实例
Jan 25 Python
Python3中详解fabfile的编写
Jun 24 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
Python使用pyenv实现多环境管理
Feb 05 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 Python
python非标准时间的转换
Jul 25 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 #Python
python如何实现异步调用函数执行
Jul 08 #Python
django中forms组件的使用与注意
Jul 08 #Python
python celery分布式任务队列的使用详解
Jul 08 #Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 #Python
Python数据类型之列表和元组的方法实例详解
Jul 08 #Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 #Python
You might like
php5中类的学习
2008/03/28 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
JS验证码实现代码
2017/09/14 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python中__call__方法示例分析
2014/10/11 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
祖国在我心中演讲稿600字
2014/05/04 职场文书
企业法人授权委托书
2014/09/25 职场文书
庆祝儿童节标语
2014/10/09 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android