python 实现12bit灰度图像映射到8bit显示的方法
图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在CT里的例子有软组织、骨头、脑组织、肺、腹部等等。
技术问题
1、显示器往往只有8-bit,而数据有12-至16-bits。
2、如果将数据的min和max间(dynamicrange)的之间转换到8-bit0-255去,过程是个有损转换,而且出来的图像往往突出的是些噪音。
算法分析
12-bit到8-bit直接转换:
computeMinMax(pixel_val,min,max);//先算图像的最大和最小值 for(i=0;i这个算法必须有,对不少种类的图像是很有效的:如8-bit图像,MRI,ECT,CR等等。
python实现
defmatrix2uint8(matrix): ''' matrixmustbeanumpyarrayNXN Returnsuint8version ''' 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,Roundelementsofthearraytothenearestinteger.defpreprocess(img,crop=True,resize=True,dsize=(224,224)): ifimg.dtype==np.uint8: img=img/255.0 ifcrop: 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 ifresize: norm_img=imresize(crop_img,dsize,preserve_range=True) else: norm_img=crop_img return(norm_img).astype(np.float32) defdeprocess(img): returnnp.clip(img*255,0,255).astype(np.uint8)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。