【python】《多媒体技术与应用》实验报告「数字图像基础」

实验名称

数字图像基础

实验时间

2022/3/28

姓名

班级

计非201

学号

成绩

扫描二维码关注公众号,回复: 14231583 查看本文章

  • 实验目的

1. 掌握图像的采样和量化;

2. 掌握图像基本属性的操作;

3. 能完成图像的基本运算。

二.实验原理

数字图像的本质是一个多维矩阵。数字图像处理的本质是对多维矩阵的操作。按照处理

对象的不同,可将数字图像处理分为黑白图像处理、灰度图像处理、彩色图像处理。按照处

理方法进行划分,可将数字图像处理分为空间域处理与频域处理。按照处理策略不同,数字

图像处理又可分为全局处理与局部处理。

数字图像处理的方便性和灵活性,以及现代计算机的广泛普及,使得数字图像处理技术

成为图像处理技术的主流。数字图像处理的一般步骤为:图像信息的获取、图像信息的存储、

图像信息的处理、图像信息的传输、图像信息的展示等环节。目前常见的数字图像处理方法

包括:图像的数字化、编码、增强、恢复、变换、压缩、存储、传输、分析、识别、分割等。

三.实验内容与关键步骤

1. 实验环境的搭建

2. 安装第三方库skimage

3. 图像采样和量化,修改采样比率ratio 参数的值,体会采样频率对图像空间分辨率的影响。

4. 图像基本属性的操作,可以通过对像素构成矩阵的灰度值进行操作,达到调整图像亮

度的目的。

  1. 图像的简单计算,设对两幅图像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,提取色彩通道,通道互换,图像加减,直方图均衡等操作.

猜你喜欢

转载自blog.csdn.net/qq_33884853/article/details/123969204