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迭代器实例简析
Sep 25 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
Jun 16 Python
python批量修改图片大小的方法
Jul 24 Python
python时间序列按频率生成日期的方法
May 14 Python
新手入门Python编程的8个实用建议
Jul 12 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
python爬虫要用到的库总结
Jul 28 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
python tkinter模块的简单使用
Apr 07 Python
python异步的ASGI与Fast Api实现
Jul 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的无限分类实现想法~
2007/01/02 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
python解析基于xml格式的日志文件
2017/02/25 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Django获取应用下的所有models的例子
2019/08/30 Python
使用python实现画AR模型时序图
2019/11/20 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
生产主管岗位职责
2013/11/10 职场文书
2014年大学生自我评价
2014/01/19 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
销售工作决心书
2015/02/04 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书