文章目录
前言
本文介绍关于数字图像处理的一些基本内容和一些代码演示
一、什么是数字图像?
数字图像,又称数码图像或数位图像,是二维图像用有限数字数值像素的表示。由数组或矩阵表示,其光照位置和强度都是离散的。数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用数字计算机或数字电路存储和处理的图像。
1.数字图像的表示
一副图像可以表示为一个范围有限二维空间内幅值有限的函数,其数学表达式为:
I=f(x,y)
xstrat≤x≤xend 且 ystart≤y≤yend 且 Imin≤I≤Imax
图像在x和y坐标以及在幅度变化上是连续的。要将这样的一幅图像转换成数字形式,要求对坐标和幅度进行数字化。将坐标值数字化称为取样,将幅值数字化称为量化。因此,当x、y分量及幅值f都是有限且离散的量时,我们称图像为数字图像。
M,N必须为正数,L为灰度级,灰度的取值范围为[0,L-1]。灰度级的取值范围一般称为图像的动态范围。
一般,M、N和L取值为2的整数次幂
L=2k,称为k位图像
图像的数据类型
二、关于图像处理的库和采样实验。
1.现在常用到的两个库
1. scikit Image
scikit-image是一个开源的Python包,可以使用 numpy 数组。它实现了用于研究、教育和工业应用的算法和实用程序。它是一个相当简单和直接的库,即使对于Python生态系统的新手也是如此。这些代码是由活跃的志愿者社区编写的,具有高质量和同行评审的特性。
2. Numpy
Numpy是Python编程中的核心库之一,提供对数组的支持。图像本质上是一个包含数据点像素的标准Numpy数组。因此,通过使用基本的NumPy操作,如切片、屏蔽和花式索引,我们可以修改图像的像素值。可以使用skimage加载图像,并使用matplotlib显示图像。
2.采样实验
第一个是输出指定行列范围的图像
import skimage;
import cv2;
from skimage import data
from matplotlib import pyplot as plt
image = data.coffee()
image1 = image[20:200,30:200,:]
plt.imshow(image1)
plt.show()
第二个是使用均值方法进行图像模拟采样
import skimage
import cv2
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()
shape[]里面的参数
img.shape[0]:图像的垂直尺寸(高度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数(灰度值)
在矩阵中,[0]就表示行数,[1]则表示列数
ratio为采样比率,这个值越高,采样间隔越大,所得图像像素越少,空间分辨率越低,图像质量越差,但数据量小
在运行以上代码时需要安装相应的库
总结
学习数字图像处理第一周的记录