1 格式说明
1 Andor相机默认采集16bit图像,img = io.imread('radiography image 1.tif')
读取后即为uint16,运算中自动转为float64。
2 ImageJ中,图像经过image calculator加减乘除运算后,会自己转为float32(32bit)储存。同python中的float32格式储存。
tiff格式存储:
jpg\png格式不能无损保存,会自动转为uint8保存,推荐tiff储存
float64存储无法预览,float32的tif图像可以预览。np中默认float64运算,可以改为float32储存。
(uint8/16/32可以预览,但是,float64转化为uint8/16/32/64保存后,低数值的像素会丢失信息,不要转为uint。float64转float32基本不丢失信息)
读取
img = io.imread('radiography image 1.tif')
img = skimage.img_as_float32(img)
存储tiff
image = np.array(image, dtype=np.float32)
io.imsave('img-dealed.tiff',image)
2 读取
skimage
import skimage
from skimage import io, color
# 读取灰度图,能做到16bit无损
img = io.imread('CT-220s_681.tif') # 直接就是numpy类型,dtype根据图片格式决定
img = skimage.img_as_float32(img) # dtype转换为float32
print(img.shape, type(img), img.dtype)
# 读取彩色图,默认RGB
img = io.imread('0006.png')
print(img.shape, type(img), img.dtype)
print(img)
输出
(721, 1994) <class 'numpy.ndarray'> uint16
[[47532 46889 47658 ... 46906 46789 46942]
[48233 47433 47538 ... 47491 47502 47378]
[47926 46989 46765 ... 46272 46423 46601]
...
[47306 45753 46147 ... 47469 47149 47082]
[46289 46380 46739 ... 47196 46787 47083]
[46588 46007 46457 ... 46843 47372 47149]]
(2040, 1356, 3) <class 'numpy.ndarray'> uint8
[[[158 120 97]
...
[126 109 79]]]
3 RGB转换为灰度图
# RGB转换为灰度图。自动转化到[0,1],float64
gray_img = color.rgb2gray(img)
print(gray_img.shape, type(gray_img), gray_img.dtype)
输出
(2040, 1356) <class 'numpy.ndarray'> float64