前言
首先确保你的电脑已安装pycharm软件,我们在Pycharm平台编译自己的python语句,第一次发博客,纯纯的小白,请各位读者朋友手下留情不要踩啊,若有任何问题欢迎评论区留言,作者看到一定及时回复。
一、反色变换
图像反色变换 output = L - input
反色变换代码如下
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
def set_chinese(): #中文显示工具函数
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
def image_inverse(input):
value_max = np.max(input) #求输入图像最大灰度值,对应公式中的“L"
output = value_max - input
return output
if __name__ == '__main__':
set_chinese()
gray_img = np.asarray(Image.open('./00.jfif').convert('L'))
inv_img = image_inverse(gray_img)
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.set_title('原图')
ax1.imshow(gray_img, cmap='gray', vmin=0, vmax=255)
ax2 = fig.add_subplot(122)
ax2.set_title('反转变换结果')
ax2.imshow(inv_img, cmap='gray', vmin=0, vmax=255)
plt.show()
运行结果
二、对数变换
假设原始图像的灰度取值范围是[x1,x2],(x2>x1>0),
则对数变换为:
output = log(1 + input) #1确保输出不为负无穷
程序代码如下:
import numpy as np
import matplotlib.pyplot as plt
def set_chinese(): #中文显示工具函数
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
def image_log(input):
return np.log(1 + input)
if __name__ == '__main__':
set_chinese() #调用此函数,窗口就可以正确显示中文
input = np.array([[10,150],
[250,25500]])
output = image_log(input)
print(output)
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.set_title('对数变换前',fontsize=12)
ax1.imshow(input, cmap='gray', vmin=0, vmax=25500)
ax2 = fig.add_subplot(122)
ax2.set_title('对数变换后', fontsize=12)
ax2.imshow(output, cmap='gray')
plt.show()
运行结果
三、伽马变换
伽马变换又称幂律变换,因为他使用幂函数来操作输入图像。
实验程序如下:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
def set_chinese(): #中文显示工具函数
import matplotlib
print("[INFO] matplotlib版本为: %s" % matplotlib.__version__)
matplotlib.rcParams['font.sans-serif'] = ['FangSong']
matplotlib.rcParams['axes.unicode_minus'] = False
def gamma_trans(input,gamma=2,eps=0 ):
return 255. * (((input + eps)/255.) ** gamma)
def update_gamma(val):
gamma = slider1.val
output = gamma_trans(input_arr, gamma=gamma, eps=0.5)
print("--------\n", output)
ax1.set_title("伽马变换后,gamma= " + str(gamma))
ax1.imshow(output, cmap='gray', vmin=0, vmax=255)
if __name__ == '__main__':
set_chinese() #调用此函数,窗口就可以正确显示中文
input_arr = np.array( [ [0, 50, 100, 150],
[0, 50, 100, 150],
[0, 50, 100, 150]] )
fig = plt.figure()
ax0 = fig.add_subplot(121)
ax0.set_title('输入矩阵')
ax0.imshow(input_arr, cmap='gray', vmin=0, vmax=255)
ax1 = fig.add_subplot(122)
plt.subplots_adjust(bottom=0.3)
s1 = plt.axes([0.25, 0.1, 0.55, 0.03], facecolor='lightgoldenrodyellow')
slider1 = Slider(s1, '参数gamma', 0.0, 2.0,
valfmt='%.f', valinit=1.0, valstep=0.1)
slider1.on_changed(update_gamma)
slider1.reset()
slider1.set_val(1)
plt.show()
运行结果