Fork me on GitHub

数字图像处理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_inhigh_in之间的值映射到low_outhigh_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为输出灰度值。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()

其中用scipymisc.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)  
posted @ 2019-01-12 10:20  小黑子杜  阅读(930)  评论(0编辑  收藏  举报