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

图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在 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)

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

(0)

相关推荐

  • python实现彩色图转换成灰度图

    本文实例为大家分享了python实现彩色图转换成灰度图的具体代码,供大家参考,具体内容如下 from PIL import Image import os # 图像组成:红绿蓝 (RGB)三原色组成 亮度(255,255,255) image = "Annie1.jpg" img = Image.open(image) img_all = "素描" + image new = Image.new("L", img.size, 255) width

  • Python读取MRI并显示为灰度图像实例代码

    本文实例主要关于Python实现读取MRI(核磁共振成像)为numpy数组,使用imshow显示为灰度. 代码如下: import matplotlib.pyplot as plt import matplotlib.cbook as cbook import matplotlib.cm as cm import numpy as np # Data are 256x256 16 bit integers with cbook.get_sample_data('s1045.ima.gz') as

  • Python cv2 图像自适应灰度直方图均衡化处理方法

    __author__ = 'Administrator' import numpy as np import cv2 mri_img = np.load('mri_img.npy') # normalization mri_max = np.amax(mri_img) mri_min = np.amin(mri_img) mri_img = ((mri_img-mri_min)/(mri_max-mri_min))*255 mri_img = mri_img.astype('uint8') r,

  • python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结

    在处理图像的时候经常是读取图片以后把图片转换为灰度图.作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法. 首先导入包: import numpy as np import cv2 import tensorflow as tf from PIL import Image 方法一:在使用OpenCV读取图片的同时将图片转换为灰度图: img = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE) print("cv2.imread(imgfile, cv2.I

  • Python图像灰度变换及图像数组操作

    使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量.矩阵.图像等)以及线性代数函数. 数组对象可以实现数组中重要的操作,比如矩阵乘积.转置.解方程系统.向量乘积和归一化.这为图像变形.对变化进行建模.图像分类.图像聚类等提供了基础. 在上一篇python基本图像操作中,当载入图像时,通过调用 array() 方法将图像转换成NumPy的数组对象

  • 对python cv2批量灰度图片并保存的实例讲解

    如下所示: import cv2 #循环灰度图片并保存 def grayImg(): for x in range(1,38): #读取图片 img = cv2.imread("C:\\Users\\lyl\\Desktop\\new_dahuoji\\img2\\{}.jpg".format(str(x))) GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #保存灰度后的新图片 cv2.imwrite("C:\\Users\\l

  • python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别

    前言 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也有使用汉字的.在这个基础上增加噪点.干扰线.变形.重叠.不同字体颜色等方法来增加识别难度. 相应的,验证码识别大体可以分为下面几个步骤: 灰度处理 增加对比度(可选) 二值化 降噪 倾斜校正分割字符 建立训练库 识别 由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码,这样做的好处就是可以有大量的知道明确结果

  • Python 将RGB图像转换为Pytho灰度图像的实例

    问题: 我正尝试使用matplotlib读取RGB图像并将其转换为灰度. 在matlab中,我使用这个: img = rgb2gray(imread('image.png')); 在matplotlib tutorial中他们没有覆盖它.他们只是在图像中阅读 import matplotlib.image as mpimg img = mpimg.imread('image.png') 然后他们切片数组,但是这不是从我所了解的将RGB转换为灰度. lum_img = img[:,:,0] 编辑:

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

    图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分.这里所指的"关键部分"在 CT 里的例子有软组织.骨头.脑组织.肺.腹部等等. 技术问题 1.显示器往往只有 8-bit, 而数据有 12- 至 16-bits. 2.如果将数据的 min 和 max 间 (dynamic range) 的之间转换到 8-bit 0-255 去,过程是个有损转换, 而且出来的图像往往突出的是些噪音. 算法分析 12-bit 到 8-bit 直接转换: computeMinMax(p

  • python爬虫租房信息在地图上显示的方法

    本人初学python是菜鸟级,写的不好勿喷. python爬虫用了比较简单的urllib.parse和requests,把爬来的数据显示在地图上.接下里我们话不多说直接上代码: 1.安装python环境和编辑器(自行度娘) 2.本人以58品牌公寓为例,爬取在杭州地区价格在2000-4000的公寓. #-*- coding:utf-8 -*- from bs4 import BeautifulSoup from urllib.parse import urljoin import requests

  • 在python tkinter中Canvas实现进度条显示的方法

    如下所示: from tkinter import * import time #更新进度条函数 def change_schedule(now_schedule,all_schedule): canvas.coords(fill_rec, (5, 5, 6 + (now_schedule/all_schedule)*100, 25)) root.update() x.set(str(round(now_schedule/all_schedule*100,2)) + '%') if round(

  • Python图像处理之图像的读取、显示与保存操作【测试可用】

    本文实例讲述了Python图像处理之图像的读取.显示与保存操作.分享给大家供大家参考,具体如下: python作为机器学习和图像处理的利器,收到越来越多的推崇,特别是在图像处理领域,越来越多的研究和开发开始转向使用python语言,下面就介绍python图像处理中最基本的操作,即图像的读取显示与保存. 1.使用PIL模块 代码如下: # -*- coding:utf-8 -*- from PIL import Image import numpy as np def test_pil(): #读

  • Python编程实现控制cmd命令行显示颜色的方法示例

    本文实例讲述了Python编程实现控制cmd命令行显示颜色的方法.分享给大家供大家参考,具体如下: 基于win7 + python3.4 运行效果: import ctypes import sys '''Windows CMD命令行颜色''' # 句柄号 STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE= -11 STD_ERROR_HANDLE = -12 # 前景色 FOREGROUND_BLACK = 0x0 # 黑 FOREGROUND_BLUE = 0

  • python实现在控制台输入密码不显示的方法

    本文实例讲述了python实现在控制台输入密码不显示的方法.分享给大家供大家参考.具体实现方法如下: import console; namespace console{ //控制台读取密码,并显示星号 getPassword = function(){ var tstr = {}; var input = kbRead(true); while( input.wVirtualKeyCode != 0xD/*_VK_ENTER*/ ){ if( input.uChar.asciiChar ){

  • python字符串对其居中显示的方法

    本文实例讲述了python字符串对其居中显示的方法.分享给大家供大家参考.具体如下: 下面的代码可以让字符串居中,左对齐和右对齐,字符串长度设置为50,居中后左右补充空格,右对齐会在左侧补充空格 string1 = "Now I am here." print string1.center( 50 ) print string1.rjust( 50 ) print string1.ljust( 50 ) 希望本文所述对大家的Python程序设计有所帮助.

  • Python中文竖排显示的方法

    本文实例讲述了Python中文竖排显示的方法.分享给大家供大家参考.具体如下: 这里将中文竖排显示 比如 衣食者人之生利也,然且犹尚有节,葬埋者人之死利也,夫何独无节於此乎 输出为: 衣 | 之 | , | 尚 | 葬 | 之 | , | 无 | 乎 | 食 | 生 | 然 | 有 | 埋 | 死 | 夫 | 节 | . | 者 | 利 | 且 | 节 | 者 | 利 | 何 | 於 | 人 | 也 | 犹 | , | 人 | 也 | 独 | 此 | import math x=u'衣食者人之生

  • Python使用matplotlib绘制多个图形单独显示的方法示例

    本文实例讲述了Python使用matplotlib绘制多个图形单独显示的方法.分享给大家供大家参考,具体如下: 一 代码 import numpy as np import matplotlib.pyplot as plt #创建自变量数组 x= np.linspace(0,2*np.pi,500) #创建函数值数组 y1 = np.sin(x) y2 = np.cos(x) y3 = np.sin(x*x) #创建图形 plt.figure(1) ''' 意思是在一个2行2列共4个子图的图中,

  • python tkinter界面居中显示的方法

    由于tkinter没有直接提供居中显示的api,因此,要想将tk的对话框居中显示,需要用到tk自带的设定位置的方法geometry() nScreenWid, nScreenHei = tkLogin.maxsize() nCurWid = tkLogin.winfo_reqwidth() nCurHeight = tkLogin.winfo_reqheight() tkLogin.geometry("{}x{}+{}+{}".format(nCurWid, nCurHeight, n

随机推荐