强度分层与灰度到伪彩色转换

    科技2022-08-22  104

    编程实现二进制数据的读写:

    代码实现:

    from skimage import io # 定义文件路径 file_name = 'morty.jpg' # 将图片读入数组image内 morty = io.imread(fname=file_name) # 定义文件路径 file_name = 'panda.jpg' # 将图片读入数组image内 panda = io.imread(fname=file_name) # # 查看图片情况 print(morty.shape) print(panda.shape)

    生成一幅图像并显示:

    代码实现:

    import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255, 155, 192), "pink") t.setup(840, 500) t.speed(10) # 鼻子 t.pu() t.goto(-100, 100) t.pd() t.seth(-30) t.begin_fill() a = 0.4 for i in range(120): if 0 <= i < 30 or 60 <= i < 90: a = a + 0.08 t.lt(3) # 向左转3度 t.fd(a) # 向前走a的步长 else: a = a - 0.08 t.lt(3) t.fd(a) t.end_fill() t.pu() t.seth(90) t.fd(25) t.seth(0) t.fd(10) t.pd() t.pencolor(255, 155, 192) t.seth(10) t.begin_fill() t.circle(5) t.color(160, 82, 45) t.end_fill() t.pu() t.seth(0) t.fd(20) t.pd() t.pencolor(255, 155, 192) t.seth(10) t.begin_fill() t.circle(5) t.color(160, 82, 45) t.end_fill() # 头 t.color((255, 155, 192), "pink") t.pu() t.seth(90) t.fd(41) t.seth(0) t.fd(0) t.pd() t.begin_fill() t.seth(180) t.circle(300, -30) t.circle(100, -60) t.circle(80, -100) t.circle(150, -20) t.circle(60, -95) t.seth(161) t.circle(-300, 15) t.pu() t.goto(-100, 100) t.pd() t.seth(-30) a = 0.4 for i in range(60): if 0 <= i < 30 or 60 <= i < 90: a = a + 0.08 t.lt(3) # 向左转3度 t.fd(a) # 向前走a的步长 else: a = a - 0.08 t.lt(3) t.fd(a) t.end_fill() # 耳朵 t.color((255, 155, 192), "pink") t.pu() t.seth(90) t.fd(-7) t.seth(0) t.fd(70) t.pd() t.begin_fill() t.seth(100) t.circle(-50, 50) t.circle(-10, 120) t.circle(-50, 54) t.end_fill() t.pu() t.seth(90) t.fd(-12) t.seth(0) t.fd(30) t.pd() t.begin_fill() t.seth(100) t.circle(-50, 50) t.circle(-10, 120) t.circle(-50, 56) t.end_fill() # 眼睛 t.color((255, 155, 192), "white") t.pu() t.seth(90) t.fd(-20) t.seth(0) t.fd(-95) t.pd() t.begin_fill() t.circle(15) t.end_fill() t.color("black") t.pu() t.seth(90) t.fd(12) t.seth(0) t.fd(-3) t.pd() t.begin_fill() t.circle(3) t.end_fill() t.color((255, 155, 192), "white") t.pu() t.seth(90) t.fd(-25) t.seth(0) t.fd(40) t.pd() t.begin_fill() t.circle(15) t.end_fill() t.color("black") t.pu() t.seth(90) t.fd(12) t.seth(0) t.fd(-3) t.pd() t.begin_fill() t.circle(3) t.end_fill() # 腮 t.color((255, 155, 192)) t.pu() t.seth(90) t.fd(-95) t.seth(0) t.fd(65) t.pd() t.begin_fill() t.circle(30) t.end_fill() # 嘴 t.color(239, 69, 19) t.pu() t.seth(90) t.fd(15) t.seth(0) t.fd(-100) t.pd() t.seth(-80) t.circle(30, 40) t.circle(40, 80) # 身体 t.color("red", (255, 99, 71)) t.pu() t.seth(90) t.fd(-20) t.seth(0) t.fd(-78) t.pd() t.begin_fill() t.seth(-130) t.circle(100, 10) t.circle(300, 30) t.seth(0) t.fd(230) t.seth(90) t.circle(300, 30) t.circle(100, 3) t.color((255, 155, 192), (255, 100, 100)) t.seth(-135) t.circle(-80, 63) t.circle(-150, 24) t.end_fill() # 手 t.color((255, 155, 192)) t.pu() t.seth(90) t.fd(-40) t.seth(0) t.fd(-27) t.pd() t.seth(-160) t.circle(300, 15) t.pu() t.seth(90) t.fd(15) t.seth(0) t.fd(0) t.pd() t.seth(-10) t.circle(-20, 90) t.pu() t.seth(90) t.fd(30) t.seth(0) t.fd(237) t.pd() t.seth(-20) t.circle(-300, 15) t.pu() t.seth(90) t.fd(20) t.seth(0) t.fd(0) t.pd() t.seth(-170) t.circle(20, 90) # 脚 t.pensize(10) t.color((240, 128, 128)) t.pu() t.seth(90) t.fd(-75) t.seth(0) t.fd(-180) t.pd() t.seth(-90) t.fd(40) t.seth(-180) t.color("black") t.pensize(15) t.fd(20) t.pensize(10) t.color((240, 128, 128)) t.pu() t.seth(90) t.fd(40) t.seth(0) t.fd(90) t.pd() t.seth(-90) t.fd(40) t.seth(-180) t.color("black") t.pensize(15) t.fd(20) # 尾巴 t.pensize(4) t.color((255, 155, 192)) t.pu() t.seth(90) t.fd(70) t.seth(0) t.fd(95) t.pd() t.seth(0) t.circle(70, 20) t.circle(10, 330) t.circle(70, 30) t.done() ts = t.getscreen() ts.getcanvas().postscript(file="PeppaPig.eps")

    图像结果:

    需将EPS文件转为JPG,在线转换网址为:EPS2JPG

    改变“传输函数”(伪彩色),将图像变成“彩色”,并进一步了解其工作原理。

    方法一:强度分层:

    代码实现:

    import numpy as np from skimage import io,exposure,color import matplotlib.pyplot as plt import math import sys # 强度分层,以5层为例 gray_morty = color.rgb2gray(morty) # 将彩色图像转换为灰色图像 # 显示灰色图像 plt.subplot(131) plt.imshow(gray_morty,cmap='gray') rows,cols = gray_morty.shape labels = np.zeros([rows,cols]) for i in range(rows): for j in range(cols): if(gray_morty[i,j] < 0.2): labels[i,j] = 0 elif(gray_morty[i,j] < 0.4): labels[i,j] = 1 elif(gray_morty[i,j] < 0.6): labels[i,j] = 2 elif(gray_morty[i,j] < 0.8): labels[i,j] = 3 else: labels[i,j] = 4 cols_morty = color.label2rgb(labels) # 不同的灰度区间采用不同颜色 # 显示转换后图像 plt.subplot(132) plt.imshow(cols_morty) # 显示原图 plt.subplot(133) plt.imshow(morty) plt.show()

    图像结果:

    从左至右分别为灰度图像,伪彩色图像,原图。

    方法二:灰度值到彩色变换:

    代码实现:

    import numpy as np from skimage import io,exposure,color import matplotlib.pyplot as plt import math import sys # 灰度值到彩色变换 # 定义灰度值到彩色变换 L = 255 def GetR(gray): if gray < L/2: return 0 elif gray > L/4*3: return L else: return 4*gray-2*L def GetG(gray): if gray < L/4: return 4*gray elif gray > L/4*3: return 4*L-4*gray else: return L def GetB(gray): if gray < L/4: return L elif gray > L/2: return 0 else: return 2*L-4*gray gray_morty = color.rgb2gray(morty)*255 color_morty = np.zeros(morty.shape,dtype = 'uint8') for ii in range(morty.shape[0]): for jj in range(morty.shape[1]): r,g,b = GetR(gray_morty[ii,jj]),GetG(gray_morty[ii,jj]),GetB(gray_morty[ii,jj]) color_morty[ii,jj,:] = (r,g,b) plt.subplot(121) plt.imshow(gray_morty,cmap='gray') plt.subplot(122) plt.imshow(color_morty) plt.show()

    图像结果:

    从左至右分别为:灰度图像,彩色变换后图像。

    Processed: 0.016, SQL: 9