本文已参与「新人创作礼」活动,一起开启掘金创作之路。
实验名称
数字图像基础
实验时间
2022/3/28
姓名
班级
计非201
学号
成绩
- 实验目的
1. 掌握图像的采样和量化;
2. 掌握图像基本属性的操作;
3. 能完成图像的基本运算。
二.实验原理
数字图像的本质是一个多维矩阵。数字图像处理的本质是对多维矩阵的操作。按照处理
对象的不同,可将数字图像处理分为黑白图像处理、灰度图像处理、彩色图像处理。按照处
理方法进行划分,可将数字图像处理分为空间域处理与频域处理。按照处理策略不同,数字
图像处理又可分为全局处理与局部处理。
数字图像处理的方便性和灵活性,以及现代计算机的广泛普及,使得数字图像处理技术
成为图像处理技术的主流。数字图像处理的一般步骤为:图像信息的获取、图像信息的存储、
图像信息的处理、图像信息的传输、图像信息的展示等环节。目前常见的数字图像处理方法
包括:图像的数字化、编码、增强、恢复、变换、压缩、存储、传输、分析、识别、分割等。
三.实验内容与关键步骤
1. 实验环境的搭建
2. 安装第三方库skimage
3. 图像采样和量化,修改采样比率ratio 参数的值,体会采样频率对图像空间分辨率的影响。
4. 图像基本属性的操作,可以通过对像素构成矩阵的灰度值进行操作,达到调整图像亮
度的目的。
- 图像的简单计算,设对两幅图像f(x.y)和h(x.y)的算术运算或逻辑运
算结果是g(xy),则可直接将g(x,y)覆盖f(x,y)或h (xy),即从原存放输人图像的空间直接得
到输出图像。
四.代码
准备第三方库
安装 numpy
mkl
scipy
matplotlib
scikit-image
下载SKIMAGE的全部测试图片
pip install pooch
python
from skimage.data import download_all
download_all()
1. 采样(修改radio)
from skimage import data
from matplotlib import pyplot as plt
import numpy as np #导入所需类包
image=data.coffee() #载入测试图像
print(image.shape) #显示图像原始大小
print(type(image)) #显示图像类型
ratio=20 #设置采样比率(此处修改)
image1=np.zeros((int(image.shape[0]/ratio),
int(image.shape[1]/ratio),image.shape[2]),dtype='int32')#设置采样后图像大小
for i in range(image1.shape[0]):
for j in range(image1.shape[1]):
for k in range(image1.shape[2]):#对图像进行遍历
delta=image[i*ratio:(i+1)*ratio,j*ratio:(j+1)*ratio,k]#获取需要采样图像块
image1[i,j,k]=np.mean(delta)#计算均值,并存入结果图像
plt.imshow(image1)#打印采样后图像图像
plt.show()
2. 量化(修改radio)
from skimage import data
from matplotlib import pyplot as plt
image=data.coffee() #载入测试图像
ratio=128 #设置量化比率
for i in range(image.shape[0]):
for j in range(image.shape[1]):
for k in range(image.shape[2]):
image[i][j][k]=int(image[i][j][k]/ratio)*ratio
#对图像每个像素进行量化
plt.imshow(image)#打印采样后图像图像
plt.show()
3. gamma调整(修改adjust_gamma方法的第二个参数)
from skimage import data,io,exposure
from matplotlib import pyplot as plt
#读入图像
image=data.coffee()
#分别计算gamma=0.2,0.67,25时的图像
image_1=exposure.adjust_gamma(image,0.1)
image_2=exposure.adjust_gamma(image,0.67)
image_3=exposure.adjust_gamma(image,25)
#分别展示原图及结果图像
plt.subplot(2,2,1)
plt.title('gamma=1')
io.imshow(image)
plt.subplot(2,2,2)
plt.title('gamma=0.2')
io.imshow(image_1)
plt.subplot(2,2,3)
plt.title('gamma=0.67')
io.imshow(image_2)
plt.subplot(2,2,4)
plt.title('gamma=25')
io.imshow(image_3)
plt.show()
4. 提取色彩通道
from skimage import data,io
from matplotlib import pyplot as plt
#读入图像
image=data.coffee()
#分别取出红、绿、蓝三个颜色通道
image_r=image[:,:,0]
image_g=image[:,:,1]
image_b=image[:,:,2]
#分别展示三个通道
plt.subplot(2,2,1)
io.imshow(image)
plt.subplot(2,2,2)
io.imshow(image_r)
plt.subplot(2,2,3)
io.imshow(image_g)
plt.subplot(2,2,4)
io.imshow(image_b)
plt.show()
5. 通道互换
from skimage import data,io
from matplotlib import pyplot as plt
#读入图像
image=data.coffee()
#分别取出红、绿、蓝三个颜色通道
image_r=image[:,:,0]
image_g=image[:,:,1]
image_b=image[:,:,2]
#红色和蓝色互换
temp=image_r
image_r=image_b
image_b=temp
#将互换后的通道颜色重新赋值给图像
image[:,:,0]=image_r
image[:,:,2]=image_b
#图像显示
plt.imshow(image)
plt.show()
6. 图像加减
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12)
from skimage import data
from matplotlib import pyplot as plt
moon=data.moon()
camera=data.camera()
image_minus=moon-camera
image_plus=moon+camera
plt.set_cmap(cmap='gray')
plt.subplot(2,2,1)
plt.title('月亮图像',fontproperties=font_set)
plt.imshow(moon)
plt.subplot(2,2,2)
plt.title('摄影师图像',fontproperties=font_set)
plt.imshow(camera)
plt.subplot(2,2,3)
plt.title('月亮加摄影师图像',fontproperties=font_set)
plt.imshow(image_plus)
plt.subplot(2,2,4)
plt.title('月亮减摄影师图像',fontproperties=font_set)
plt.imshow(image_minus)
plt.show()
7. 直方图均衡
from skimage import data,exposure
import matplotlib.pyplot as plt
img=data.moon()
plt.figure("hist",figsize=(8,8))
arr=img.flatten()
plt.subplot(221)
plt.imshow(img,plt.cm.gray) #原始图像
plt.subplot(222)
plt.hist(arr, bins=256, density=1,edgecolor='None',facecolor='red',stacked=True) #原始图像直方图
img1=exposure.equalize_hist(img)
arr1=img1.flatten()
plt.subplot(223)
plt.imshow(img1,plt.cm.gray) #均衡化图像
plt.subplot(224)
plt.hist(arr1, bins=256, density=1,edgecolor='None',facecolor='red',stacked=True) #均衡化直方图
plt.show()
- 实验结果与分析
采样比率
10
20
64
结果
量化比率
64
128
200
结果
Gamma
1, 0.1, 0.67, 25
1, 0.4, 0.8, 10
1, 0.9, 1.5, 15
结果
提取色彩通道
R, G, B
G, R, B
B, G, R
结果
通道互换
绿蓝互换
红蓝互换
红绿互换
结果
图像加减
月亮和摄影师
月亮和砖
摄影师和砖
结果
直方图均衡
月亮
摄影师
砖
结果
六.实验心得体会
通过本次试验,我掌握了对图像的采样与量化的操作,对图像属性的熟悉以及能够对图像进行一些基本的计算****,****Gamma,提取色彩通道,通道互换,图像加减,直方图均衡等操作.