一、问题与解决思路

图像实质上就是一个包含了许多像素点的矩阵。

具体计算过程如下:

通过min()函数以及max()函数分别求出处理前原图像的灰度级最小值与最大值;

对原图像进行归一化处理,即用【图像矩阵元素-处理前灰度级最小值】除以【处理前灰度级最大值-处理前灰度级最小值】;

将图像灰度级放缩至我们指定的预期期间,即用【处理后的灰度级最小值】加上“ 【步骤3中归一化处理后的结果】乘以【处理后的灰度级最大值-处理后的灰度级最小值】 ”;

将处理后的图像转为uint8类型以便于正确显示。

二、Python 实现代码

1) 核心函数:

from PIL import Image

from pylab import *

# 自定义图像对比度拉伸函数 myGrayScaleTransformJ

def myGrayScaleTransformJ(img1, para):

# 若输入不合法,返回原图像

if (para[0] < 0 or para[1] > 255 or para[0] > para[1]):

img2 = Image.fromarray(uint8(img1))

return img2

# min_after,max_after 分别表示拉伸后灰度级区间的最小值与最大值

min_after = para[0]

max_after = para[1]

# min_before,max_before 分别表示处理前灰度级区间的最小值与最大值

min_before = img1.min()

max_before = img1.max()

# 1、将处理前的图像灰度级进行归一化处理

temp = (img1 - min_before) / (max_before - min_before)

# 2、将图像的灰度级放缩至我们指定的预期区间

img2 = min_after + (temp * (max_after - min_after))

# 3、转成uint8 类型以便正确显示

img2 = Image.fromarray(uint8(img2))

return img2

2) 主函数:

from PIL import Image

from pylab import *

import matplotlib.pyplot as plt

import MyModule

# 以下两行代码解决图片标题中文乱码问题

plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

img = Image.open("EXP1A.tif").convert("RGB") # 读入图像 .convert("RGB")解决灰度图像失真问题

plt.subplot(121) # 划分为1行2列,先画左边第一个

plt.axis('off')

plt.title('原图像')

plt.imshow(img) # 画出原图像

imgArr = array(Image.open("EXP1A.tif").convert("RGB")) # 读入图像并转为数组

# 读入para数组,即预期拉伸的灰度级区间范围,para1为最小值,para2为最大值

print ("请分别输入预期拉伸的灰度级区间范围的最小值与最大值(空格隔开):")

arr = input("")

para = [int(n) for n in arr.split()]

enhancedImg = MyModule.myGrayScaleTransformJ(imgArr, para) # 调用自定义函数进行线性拉伸

plt.subplot(122)

plt.axis('off')

plt.title('处理后')

plt.imshow(enhancedImg) # 画出处理后的图像

plt.show()

注意点:

使用 Python 进行图像处理需导入第三方依赖,而 Matlab 则可以直接调用官方的工具包

from PIL import Image

上方语句中的 PIL 用于完成图像的基本处理,如读取图像到程序中,默认为 uint8 类型

from pylab import *

需导入上方依赖才能将图像转换为数组

三、Matlab 实现代码

1) 核心函数

% img1:处理前的灰度图像;img2:处理后的灰度图像

% para(1)表示拉伸后灰度级区间的最小值

% para(2)表示拉伸后灰度级区间的最大值

function img2 = myGrayScaleTransformJ(img1,para)

% 若输入不合法,则返回原图像

if (para(1)<0 || para(2)>255 || para(1)>para(2))

img2 = img1;

return;

end

img1 = double(img1);

% min_after,max_after分别表示拉伸后灰度级区间的最小值与最大值

min_after = para(1);

max_after = para(2);

% min_before,max_before分别表示处理前灰度级区间的最小值与最大值

min_before = min(img1(:));

max_before = max(img1(:));

% 1、将处理前的图像灰度级进行归一化处理

temp = (img1 - min_before) ./ (max_before - min_before);

% 2、将图像的灰度级放缩至我们指定的预期区间

img2 = min_after + temp .* (max_after - min_after);

% 转成uint8类型以便正确显示

img2 = uint8(img2);

end

2) 主函数:

clc;

clear all;

img1 = imread('EXP1A.tif');

% 画出原来的图像

subplot(2,2,1);

imshow(img1);

title('A:raw img');

% 输入数据并调用函数

min = input('请输入拉伸后的灰度级最小值:');

max = input('请输入拉伸后的灰度级最大值:');

para = [min, max];

img2 = myGrayScaleTransformJ(img1, para);

% 画出将对比度线性拉伸后的图像

subplot(2,2,2);

imshow(img2);

title('A:enhanced img');

3) 运行效果:

原文链接:https://blog.csdn.net/qq_45716120/article/details/109126628

python图像对比处理_图像处理 | 灰度变换与图像对比度拉伸相关推荐

  1. java 图像刺绣算法_图像处理:OpenCV3源代码文件解析

    引言 结合冈萨雷斯的<数字图像处理>和Opencv3.0,学习图像处理算法有一段时间了,知道了函数怎么使用,但不知道opencv所用的函数源代码是如何编写的,"知其然,也要知其所 ...

  2. python检测屏幕亮点_图像处理之坏点校正及源码实现

    1 坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素 ...

  3. cnn生成图像显著图_使用CNN生成图像先验实现场景的盲图像去模糊

    论文链接:https://arxiv.org/abs/1803.03363 CVPR2018 摘要 提出了一种基于数据驱动的判别先验的盲图像去模糊方法.此项工作是基于这样一个事实:一个好的图像先验应该 ...

  4. python图像对比_Python多种图像处理库的比较与比较

    我帮助在libvips wiki 上维护一个页面,比较20个左右的常用图像处理库,以便快速和内存使用,包括相当多的Python系统. 基准测试非常简单:加载5,000 x 5,000像素RGB TIF ...

  5. python图片矢量化_图像处理tas的Python矢量化

    我在用python3(这个特定任务的NumPy)自学彩色图像处理.在 我有一个3d张量,代表图像中每个像素的RGB值,所以它的形状是(高,宽,3).在每个像素处,我要生成新的RGB值,这些值是给定像素 ...

  6. python翻译成中文_图像处理入门 100 题,有人把它翻译成了中文版!

    红色石头的个人网站: 红色石头的个人博客-机器学习.深度学习之路​www.redstonewill.com 之前,我发文推荐过一份图像处理入门 100 题,主要针对图像处理的一些基本操作,非常适合入门 ...

  7. 利用python对图像进行傅里叶变换_(九)OpenCV-Python学习—图像傅里叶变换

    对于二维图片,可以对其进行傅里叶变换,获取图片的频谱信息.频谱有很多应用,包括显著性检测,卷积定理,频率域滤波等,下面是图片傅里叶变换的一些基本概念: 1. 图像傅里叶变换 对于M行N列的图像矩阵f( ...

  8. matlab将二值图像与原图重叠_图像处理matlab及图像融合图像镶嵌图像拼接

    要把double的图像(范围是0到1)再次转化为256灰度值的,可以这样 Igrey= uint8(I2*255) 图像类型转换函数: dither() 通过颜色抖动,把真彩图像转换成索引图像或灰度图 ...

  9. 图像标注技巧_保护互联网上图像的一个简单技巧

    图像标注技巧 补习 (TUTORIAL) Have you ever worried about sharing your images on the Internet? Anytime you up ...

最新文章

  1. eclipse提示在***类中找不到main方法
  2. 深入解析windows XP/2003:内核模式和用户模式
  3. 只用html5与CSS做一个简单的页面,HTML+CSS基础训练之做一个简单页面的布局
  4. Customing 维护中TR弹出逻辑
  5. Java解析XMl文件之SAX和DOm方法
  6. 过滤序列,惰性序列_Java 8的惰性序列实现
  7. 设计一个程序实现两个任意长的整数的求和运算_自然数集,整数集,有理数集等都有字母表示,为什么无理数集没有...
  8. 浙江移动智能语音服务器,接口说明
  9. nginx+php简单配置环境
  10. Android完美适配dimens.xml脚本
  11. pureftp在企业中的应用及配置
  12. 【C++】《C++ Primer Plus》--复习题、编程练习题答案
  13. Python 散点图的数据分析
  14. linux版虚拟示波器,借你一双慧眼——DSCope虚拟示波器评测
  15. ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
  16. [蓝桥杯]分解质因数
  17. 荣耀note10无缘鸿蒙,赵明确认荣耀NOTE10 真机参数疑似全曝光!
  18. Python输入密码
  19. Python数据分析基础之Excel文件(6)
  20. 在 Adob​​e MAX 深入研究 UI/UX 设计

热门文章

  1. matlab用博德稳定性判据,自编劳斯判据判断系统稳定性的Matlab函数
  2. STM32 发送字符串至淘晶驰串口屏显示到txt控件——避坑
  3. ndnSIM学习(二)——配置VScode的跨文件转到定义
  4. linux rdac管理,Linux® RDAC Multipath Drivers
  5. php 文件大小转换,php 中以B,KB,MB,GB 表示文件大小的方法
  6. [从0开始机器学习]8.过拟合问题和正则化方法
  7. 前端开发工具 —— VSCode - Snipaste - Photoshop - Fireworks - Icomoon字库
  8. SQLiteStudio | 使用SQL语句操作表格
  9. 双蛋问题的递归解法和循环解法
  10. 射击类小游戏讲解:太空大战