本人为测绘相关专业,此文为学习课程数字图像处理所写的实习作业部分内容。想着写了也就写了,不如发出来记录以下,说不定自己以后会用到的时候能来看看。当然大家能够从中学到或借鉴到什么就更好啦。

本次实验的目标主要是为了深化对图像增强的目的及意义的理解,巩固所学理论知识,掌握直接灰 度变换的图像增强方法,掌握灰度直方图的概念及其计算方法,熟练掌握直方图均衡化的计算过程,学会分析图像直方图。

本次实验主要完成了对图像进行灰度线性变换并显示,对图像进行直方图均衡化并显示,并将原图直方图、线性变换后的直方图、均衡化后图像的直方图显示出来并进行对比。

下为代码部分:
import cv2
import numpy as np
import matplotlib.pyplot as plt#线性变换增强图像的函数
def linear_transform(img, low_in=0, high_in=1, low_out=0, high_out=1):#参数分别为输入图像,输入图像的归一化后的灰度级最低值与最高值,输出图像的归一化后的灰度级最低值与最高值#用assert函数来检验灰度级是否正常,不正常则报错assert high_in >= 0 and high_in <= 1 and low_in >= 0 and low_in <= 1assert high_out >= 0 and high_out <= 1 and low_out >= 0 and low_out <= 1#图像灰度级归一化img = img / 255.0#创造一个与输入图像大小相同的矩阵,且各元素均为0out = np.zeros_like(img)#对创新的新矩阵(即输出图像)元素一一赋值#用嵌套循环进行元素遍历for i in range(img.shape[0]):for j in range(img.shape[1]):#将超出范围的灰度值回归到范围边界值if img[i, j] < low_in:out[i, j] = low_outelif img[i, j] > high_in:out[i, j] = high_out#将处在原图像正常灰度级范围内的像素赋为线性变换后的值else:k = (high_out - low_out) / (high_in - low_in)b = (high_in * low_out - low_in * high_out) / (high_in - low_in)out[i, j] = img[i, j] * k + b#图像灰度值由归一化后还原回去out = out * 255.0#返回灰度线性变换的k,b,经灰度线性变换后的图像return k, b, outdef main():#打开一幅图像grayimg = cv2.imread('camera.png', cv2.IMREAD_GRAYSCALE)#创建8*8的画布plt.figure(figsize=(8, 8))#将2*2的原始图像放在第一号位置显示出来plt.subplot(2, 2, 1), plt.imshow(grayimg, cmap='gray'), plt.title('original img')# 直方图均衡化,得到均衡化后的图像H = cv2.equalizeHist(grayimg)#将2*2的均衡化后的图像放在第二号位置显示出来plt.subplot(2, 2, 2), plt.imshow(H, cmap='gray'), plt.title('after histeq')#线性变换 1(将[0-1]灰度映射到[1-0]灰度)并显示图像_, _, I1 = linear_transform(grayimg, 0, 1, 1, 0)plt.subplot(2, 2, 3), plt.imshow(I1, cmap='gray'), plt.title('after linear transform1')# 线性变换 2 (将[0.3-0.7]灰度映射到[0.1-0.9]灰度)并显示图像_, _, I2 = linear_transform(grayimg, 0.3, 0.7, 0.1, 0.9)plt.subplot(2, 2, 4), plt.imshow(I2, cmap='gray'), plt.title('after linear transform2')# 创建8*8的画布以显示各图像直方图plt.figure(num=2, figsize=(8, 8))#分别显示各图像的直方图(按顺序分别是:原图像的直方图、均衡化后的图像的直方图,线性变换1后的图像的直方图,线性变换2后的图像的直方图)plt.subplot(2, 2, 1), plt.hist(grayimg.flatten(), bins=256), plt.title('original hist')plt.subplot(2, 2, 2), plt.hist(H.flatten(), bins=256), plt.title('after histeq')plt.subplot(2, 2, 3), plt.hist(I1.flatten(), bins=256), plt.title('after linear transform1')plt.subplot(2, 2, 4), plt.hist(I2.flatten(), bins=256), plt.title('after linear transform2')#显示全部图像和直方图plt.show()if __name__ == '__main__':main()

实验分析与日志

(1)只用plt.imshow()无法显示图像,需要添加:plt.show()。原理是plt.imshow()函数负责对图像进行处理,并显示其格式,而plt.show()则是将plt.imshow()处理后的函数显示出来。

(2)使用plt系列函数需要进行导入包操作:import matplotlib.pyplot as plt。matplotlib.pyplot是常用的绘图库,可用于绘制柱状图、饼状图等各种图表。

(3)在创建小图或子图时,注意更改当前位置的参数,否则极易出现多图或表的重叠情况。

此代码实现是在安装配置好opencv及matplotlib.pyplot包后进行的。故需先进行好环境配置。

数字图像处理课程实习——图像的线性变换与直方图变换相关推荐

  1. 数字图像处理课程实习——傅里叶变换与频域滤波

    本次实验的目标主要是为了为了学会使用傅里叶变换将图像由空间域变到频率域,并设计和使用理想低通滤波器.理想高通滤波器和巴特沃斯低通滤波器来对图像在频域范围进行处理,而后进行逆傅里叶变换,最终得到空间域里 ...

  2. 数字图像处理课程实习——边缘检测与图像分割

    本次实验的目标主要是为了掌握图像边缘检测和分割的意义和手段,掌握图像边缘检测和分割的方法及应用并通过实验讨论不同算子对边缘检测效果的影响. 本次实验主要完成了对图像进行Sobel算子边缘检测,对图像进 ...

  3. 数字图像处理 - 投影重建图像(一)雷登变换和傅里叶切片

    关于投影的基础知识: 假设我们要用一束细细的,平行的X射线从左到右穿过(通过一个图像平面),这里我们假设物体吸收的射线束能量 比背景吸收的射线束能量多.我们利用放在放在另一端的X射线吸收检测器来检测射 ...

  4. matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc

    数字图像处理课程设计实验报告 数字图像处理课程设计 题 目:数字图像处理及Huufman(或小波变换)编码仿真实现 学生姓名: 学 院:信息工程学院 系 别:电子信息工程系 专 业:电子信息工程 班 ...

  5. matlab moveverage,MATLAB在数字图像处理课程教学中的应用

    ISSN1672-4305 CN12-1352/N 实 验 室 科 学 LABORATORY SC I ENCE 第14卷 第1期 2011年2月 Vol 14 N o 1 Feb 2011 MATL ...

  6. (附源码)python数字图像处理课程平台 毕业设计 242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

  7. 数字图像处理课程(作业+实验+大作业)相关文章 传送门

    数字图像处理课程(作业+实验+大作业)相关文章 传送门 博文说明 本文所使用代码或多或少参考了以往博文的同类or相似文章的代码,并非纯原创 本文仅用于记录并提供一种代码思路,供大家参考 文章目录 数字 ...

  8. 数字图像处理课程 复习重点

    前言: 本博客为中科院人工智能专业数字图像处理课程整理的复习重点(杨戈老师和彭思龙老师) 划重点: 一共8个大题 图像获取与生成部分: 图像获取过程.采样定理(重点) 图像为什么可以离散化 图像为什么 ...

  9. (附源码)Python数字图像处理课程平台 毕业设计242339

    Python数字图像处理课程平台的开发 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...

最新文章

  1. Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
  2. linux libpcap 效率,Linux ubuntu PF_RING+libpcap 极速捕获千兆网数据包,不丢包
  3. [线段树] Jzoj P1214 项链工厂
  4. oracle中间键配置,Oracle Exalogic中间件云服务器简介及产品配置特点(2)
  5. 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
  6. Create MSSQL Procedure
  7. Java游戏引擎libgdx的简介
  8. c++opencv汉字分割_基于OpenCV 的车牌识别
  9. 前端开发工程师应该关注什么?
  10. Fluent API Development in C# C#中流畅的API开发 Lynda课程中文字幕
  11. 怎么还原mysql的数据库文件_.sql数据库文件如何还原?
  12. excel筛选,排序
  13. linux wps怎么改成中文字体,WPS文字的 字体设置功能
  14. 云服务器被恶意ddos攻击了怎么办?
  15. 注塑工艺工程师视频教程 注塑机调机成型参数教程
  16. GIS应用技巧之联合
  17. python 预测分析_如何用Python来预测分析离职率呢
  18. 40款用于简洁网页设计的光滑英文字体【上】
  19. 蓝牙快速连接 android,Android智能设备快速连接蓝牙的方法与流程
  20. Altium Designer整理和小插曲

热门文章

  1. Python上机练习题
  2. php xdebug 配置详解,PHP Xdebug调试配置
  3. java数据过载_垃圾收集过载,Java
  4. allergro音乐术语什么意思_请问一下音乐术语stretto是什么意思???
  5. 手机android7能升9吗,安卓9.0得到用户一致好评,这六款手机已升级!你还在用安卓7.0?...
  6. 老司机程序员必备效率工具
  7. 预防“断种”风险,专家:基因编辑能提高我国种子竞争力
  8. excel拆分技巧:如何快速对金额数字进行分列
  9. linux kill 某类进程,Linux系统killall命令:终止特定的一类进程
  10. 山东大学暑期项目实训-基于信用评分卡算法模型的个人信用评级系统的设计与实现-第四周-12(7月23日)