数字图像处理中灰度变化

图像处理中分为空间域的变换和频率域的变换,空间域是指图像的平面本身,这类方法是对图像中的像素直接操作。因此,空间域处理的方法:灰度变化和空间滤波。

在这里插入图片描述

其中, f ( x , y ) f(x,y) f(x,y)为输入图像, g ( x , y ) g(x,y) g(x,y)是处理后的图像, T T T是在点 ( x , y ) (x,y) (x,y)的一个指定领域上定义的对图像 f f f进行处理的算子(操作)。邻域通常是中心在的矩形,其大小为 1 × 1 1×1 1×1,因此, ( x , y ) (x,y) (x,y)处的值仅由 f f f在该点的灰度决定。由于输出值仅仅取决于一点处的灰度值,而不取决于该点的邻域,这个时候空间域的处理公式为(灰度级变换函数或者映射函数):
在这里插入图片描述
其中 s s s r r r为所定义的变量,分别是 g g g f f f在任意点 ( x , y ) (x, y) (x,y)的灰度值

一.灰度变化

1.实现图像基本操作

(1)明暗反转
图像反转可以得到灰度级范围为【0,255】的图像的反转图像,公式如下:
线性变化: s = 255 − r s=255-r s=255r

g = imadjust(f , [ ] , [ ] , gamma)

1.原图取得:f = imread(“图片存储路径”)
Imadjust(f,[0,1],[1,0],1)
2.图像输出:imshow(g)

数字图像处理中灰度变化_第1张图片
(2)自适应参数调整函数stretchlim()

Matlab中的stretchlim主要用于自适应找到一个分割阈值向量来改变一幅图像的对比度,其通用调用格式如下:

low_high = stretchlim(f,tol); 

可得到一个灰度变换自适应最佳阈值,其中high_frac=1- low_high不用人为规定,再将其带入imadjust函数中便可实现灰度图像对比度的增加或减弱。
python代码实现

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False   #set_chinese() 调用此函数,窗口就可以显示中文
def image_inverse(input):
    value_max=np.max(input)
    output=value_max-input
    return output

if __name__=='__main__':

 gray_img=np.asarray(Image.open(r'D:\MATLAB\toolbox\images\imdata\parkavenue.jpg').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()

数字图像处理中灰度变化_第2张图片

MATLAB代码实现

close all;                            %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc;
f=imread("parkavenue.jpg");  %输入图像
q=rgb2gray(f);       %灰度化图像

g=imcomplement(q);    %使用imcomplement实现明暗反转

g1=imadjust(q,[0,1],[1,0],1);   %使用imadjust实现明暗反转
g2=imadjust(q,[0.5,0.75],[0,1],3);  %[0.50.75]的灰度扩散到[0,1]

%使用stretchlim函数对与图像操作
g3=imadjust(q,stretchlim(q),[1,0]);

%画图
figure;
subplot(2,3,1),imshow(f);title('1.原图');
subplot(2,3,2),imshow(q);title('2.灰度化后原图');
subplot(2,3,3),imshow(g);title('3.使用imcomplement实现明暗反转后');
subplot(2,3,4),imshow(g1);title('4.使用imadjust实现明暗反转后');
subplot(2,3,5),imshow(g2);title('5.[0.5,0.75]的灰度扩散到[0,1]');
subplot(2,3,6),imshow(g3);title('6.将灰度化的图像扩散到区间[1,0]');

由上图,我们可以看到使用imcomplement函数和imadjust实现明暗反转的效果差不多。使用imadjust函数将图像[0.5,0.75]区间的灰度值扩散到[0,1]区间,意思就是保留[0.5,0.75]的灰度值,其他区域的舍去,然后将保留的灰度区间映射到[0,1]之间,因此图5中对比度增强(最亮的白和最暗的黑之间差异越大),图6使用自动划分像素区域的stretchlim函数,让其图像扩散到区间[1,0](明暗反转),与图3,图4比较对比度明显增强,有利于我们对突出部分的观察。

你可能感兴趣的:(matlab,图像处理,python)