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实现3行代码解简单的一元一次方程
Aug 18 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
pytorch多GPU并行运算的实现
Sep 27 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 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
详细介绍PHP应用提速面面观
2006/10/09 PHP
php&amp;java(二)
2006/10/09 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
pyqt和pyside开发图形化界面
2014/01/22 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
python里glob模块知识点总结
2021/01/05 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
酒店服务与管理毕业生求职信
2013/11/02 职场文书
租房协议书范本
2014/04/09 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
立项申请报告范本
2015/05/15 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
python执行js代码的方法
2021/05/13 Python
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
JavaScript的Set数据结构详解
2022/02/18 Javascript