数字图像处理01:imadjust函数的Pyhton实现
版权声明:本文为博主原创文章,未经博主允许不得转载。
数字图像处理01:imadjust函数的Pyhton实现
1、imadjust函数
Matlab的工具箱函数:imadjust(f,[low_in high_in],[low_out high_out],gamma,c)
imadjust函数是针对灰度图像进行灰度变换的基本图像处理函数,此函数将图像f 灰度值映射到g中的新值,也就是将low_in与high_in之间的值映射到low_out与high_out之间。low_in以下与high_in以上的值可以被截去。也就是将low_in以下的值映射为low_out;将high_in以上的值映射为high_out。 参数gamma指明了由f映射生成图像g时曲线的形状。如果gamma的值小于1,映射被加权至较高(较亮)的输出值。如果gamma的值大于1,映射被加权至较低(较暗)的输出值。如果省略函数参数,gamma默认为1(线性映射)。
2、imadjust函数公式
r为输入灰度值;s为输出灰度值。
3、imadjust函数的映射关系图:
4、python代码实现
1. 显示图像标题所需的字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
2. 需要导入的库
import numpy as np
import matplotlib.pyplot as plt
from scipy import misc
3. 定义imadjust函数
imadjust(img, low_in, high_in, low_out, high_out, gamma, c)
其中img为输入图像。
4. 读入图像
f = misc.imread(img).astype(np.int16)
plt.figure(1)
plt.imshow(f, cmap='gray')
plt.axis('off')
plt.title('原始图像')
plt.show()
其中用scipy的misc.imread函数来读入图像,读入的图像就是一个矩阵,无需再对其矩阵化。需要注意的是,plt.imshow函数里必须要加cmap='gray’参数,否则图像会出现伪彩色。
原始图像:
5. 函数实现部分
# imadjust函数运算部分
for x in range(0, w):
for y in range(0, h):
if f[x, y] <= low_in:
f1[x, y] = low_out
elif f[x, y] >= high_in:
f1[x, y] = high_out
else:
f1[x, y] = c * (f[x, y]**gamma)
经过imadjust函数变换后的图:
其中参数实现为:imadjust(‘figure1.png’, 50, 100, 5, 10, 1, 1)
6. 对原始图像和变换后图像作差值
代码: f2 = np.abs(f-f1) #差值的绝对值
注意要对差值取绝对值。
差值图像:
7. 整体代码
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 11 13:54:26 2019
@author: ChengGD
"""
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from scipy import misc
#import scipy
#import cv2
def imadjust(img, low_in, high_in, low_out, high_out, gamma, c):
f = misc.imread(img).astype(np.int16)
plt.figure(1)
plt.imshow(f, cmap='gray')
plt.axis('off')
plt.title('原始图像')
plt.show()
w, h = f.shape
f1 = np.zeros([w, h])
# imadjust函数运算部分
for x in range(0, w):
for y in range(0, h):
if f[x, y] <= low_in:
f1[x, y] = low_out
elif f[x, y] >= high_in:
f1[x, y] = high_out
else:
f1[x, y] = c * (f[x, y]**gamma)
scipy.misc.imsave('figure2.png', f1)
plt.figure(2)
plt.imshow(f1, cmap='gray')
plt.axis('off')
plt.title('变换图像')
plt.show()
plt.figure(3)
f2 = np.abs(f-f1) #差值的绝对值
scipy.misc.imsave('figure3.png', f2)
plt.imshow(f2, cmap='gray')
plt.axis('off')
plt.title('差值图像')
plt.show()
imadjust('figure1.png', 50, 100, 5, 10, 1, 1)
知行合一,
翻万卷书,游千里路,会百家才