数字图像处理原理与应用的内容提要

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字图像处理原理与应用的内容提要相关的知识,希望对你有一定的参考价值。

参考技术A 1.什么是图像?
粗略地讲,图像是某一个二维或三维景物呈现在人们心目中的影像;
确切地讲,图像是光辐射能量照在物体上,经过物体的反射或透射,或由发光物体本身发出的光能量,在人的视觉器官中所重现出的物体的视觉信息。
2.数字图像:最小单位,两个特征(空间位置特征、属性特征)
数字图像:用离散的数字表示的图像I=I(r,c)在计算机中用二维矩阵来表示。
把图像按行与列分成m×n个网格,每个网格称为图像的一个像素。
数字图像的最小单位是像素(像元)
像素(像元)具有空间位置特征和属性特征
【空间分辨率】:指在水平方向和垂直方向上共分为多少格(点),记为M×N。
(同一幅图像,分辨率越高,图像质量越好)
【灰度分辨率】:指象元亮度(灰度)层次的多少,常称为灰度级,记为2n,如28=256个灰度级。(颜色数越多,用以表示颜色的位数越长,图像颜色就越逼真。)
【空间频率】:图象明暗变化的快慢,空间频率高表征图象的细微变化(细节),反之则表示图象中大的物体。本概念是图象处理中频域处理的基础。
【数字图像的分类】:
① 按亮度等级:二值图像和灰度图像(二值图像—灰度值仅有0和1组成)
② 按色调:黑白图象和彩色图象(彩色图像每一点的灰度值有好几个分量构成,如R、G、B;然后这几个分量的灰度值叠加形成彩色图像。黑白图像—每一点的灰度值只有一个)
③ 按内容和变化性质:静止图像和活动图像
④ 按所占空间维数:二维平面图像和三维、多维立体图像等。
⑤ 从人的视觉效果分:可见图像(由可见光形成,能为人的视觉系统所直接感受)和不可见图像(不能为人眼所直接感受,但通过能量转换和相应的显示装置变换后,可以为人的视觉所感受。如 X 光透视图象、红外电视图象、微波辐射计以及 B 型超声诊断仪上所显示的图象等。)
3.采样和量化的定义
【模拟图像数字化】:包括采样和量化两个过程
【采样】——将空间上连续的图像变换成离散点的操作,即位置的离散化。将模拟图像按纵横两方向分割为若干个形状、大小相同的像元,各像元的位置由其所在的行和列表示。
【量化】——将像素灰度转换成离散的数值的过程,即灰度的离散化
量化参数——灰度级数:一幅数字图像中不同灰度值的个数称为灰度级数,用K表示。
一般来说,K=2n。8位灰度图像,有256个灰度级别。除了纯黑与纯白之外,其他颜色介于黑和白之间的灰色。
4.数字图像处理过程的几个特点:信息量大、数据量大、重复性运算大、处理技术综合性强
【图像处理】:为了从图像中观察到更多更清晰的信息,得到更好的利用,要对可能模糊不清或发生了畸变等等的原始影像进行技术上的处理,这种处理技术就称为图像处理。
光学图像处理,又称为模拟图像处理。
数字图像处理,又称为自动图像处理,或计算机图像处理(发展趋势:数字图像处理)
(1)利用计算机对数字图像进行各种目的的处理
(2)将图像转化为另一种加工的图像:图像到图像的过程
(3)将图像转化为非图像的表示:分析、识别与理解的过程

5.什么是遥感?根据遥感平台,可以分为哪几类?
【遥感图像处理】是数字图像处理中的特殊分支。数字图像处理中的常用处理和分析技术是遥感图像处理的基础。遥感图像由于其自身成像的特点和特殊的行业应用,又有许多独特的处理方法,如辐射校正、几何校正、融合、镶嵌和分类等。
【遥感】——遥远的感知
在远离地面的不同运载工具上(高塔、气球、飞机、火箭、人造卫星、宇宙飞船、航天飞机等),运用探测仪器(传感器),对地表各种物体的电磁波信息进行探测成像,并且经过信息数据的传输、处理、分析, 对地球资源与环境进行探测和监控的综合性技术。
【根据遥感平台分类】:遥感中搭载传感器的工具统称为遥感平台。
地面平台:高度0-50m范围内,包括车、船、塔三脚架、遥感塔、遥感车等对地观测,研究中应用较少。
航空平台:高度在100m-10多km,包括低、中、高空飞机,以及飞艇、气球等.
航天平台:高度在150km以上。航天遥感平台目前发展最快,应用最广。根据航天遥感平台的服务内容,可以将其分为气象卫星系列、陆地卫星系列和海洋卫星系列。
遥感系统组成三要素:目标物体、从目标物体传过来的光线、感受光线的传感器

【遥感图像的基本描述】:
与采样相关:
① 谱分辨率:遥感器在接收目标辐射的光谱时,实际能分辨的最小波长间隔。
② 频谱采样率:遥感器在接收目标辐射时,对光谱进行采样时的最小波长间隔。
与量化相关:
① 辐射分辨率:传感器在接收波谱信号时,能分辨的最小辐射度差。
② 辐射采样率:对传感器接收信号进行量化时,每个像素所采用的比特数。
参考技术B

这本书不仅可作为大学生和研究生的教材,对教师和科研工作者,也是很好的参考书。

python《多媒体技术与应用》实验报告「数字音频处理」

 《多媒体技术与应用》实验报告

实验名称

数字视频处理

实验时间

2022/4/25

姓名

班级

计非201

学号

成绩

一.  实验目的

1.掌握数字音频的读取与打开;

2.掌握数字音频信号的频谱分析;

3.验证 PCM 编码算法。

二.实验原理

声音是由物体振动而产生的,声波的三要素是频率、振幅和波形,频率代表音阶的高低, 振幅代表响度(音量),波形代表音色,采样频率越高所能描述的声波频率就越高。采样率决定声音频率的范围(相当于音调),可以用数字波形表示。以波形表示的频率范围通常被称为带宽。

采样频率是单位时间内对媒体对象的采样次数,单位为赫兹 Hz。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。脉冲编码调制(PCMPulse Code Modulation)在通信系统中完成将语音信号数字化功能。是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对于音频信号。

PCM 的实现主要包括三个步骤完成:抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。根据 CCITT 的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为 A 律和 m 律方式,本设计采用了 A 律方式。

三.实验内容与关键步骤

1. 打开音频信号文件,获取音高、音量等信息;

2. 对打开的文件进行频谱分析;

3. 验证 PCM 算法。

四.代码

4-1 音量

import math
import wave
import pylab as pl
import numpy as np


# method 1: absSum
def calVolume(waveData, frameSize, overLap):
    wlen = len(waveData)
    step = frameSize - overLap
    frameNum = int(math.ceil(wlen * 1.0 / step))
    volume = np.zeros((frameNum, 1))
    for i in range(frameNum):
        curFrame = waveData[np.arange(i * step, min(i * step + frameSize, wlen))]
        curFrame = curFrame - np.median(curFrame)  # zero-justified
        volume[i] = np.sum(np.abs(curFrame))
    return volume


# method 2: 10 times log10 of square sum
def calVolumeDB(waveData, frameSize, overLap):
    wlen = len(waveData)
    step = frameSize - overLap
    frameNum = int(math.ceil(wlen * 1.0 / step))
    volume = np.zeros((frameNum, 1))
    for i in range(frameNum):
        curFrame = waveData[np.arange(i * step, min(i * step + frameSize, wlen))]
        curFrame = curFrame - np.mean(curFrame)  # zero-justified
        volume[i] = 10 * np.log10(np.sum(curFrame * curFrame))
    return volume


# ============ test the algorithm =============
# read wave file and get parameters.
fw = wave.open('sunday.wav', 'r')
params = fw.getparams()
print(params)
nchannels, sampwidth, framerate, nframes = params[:4]
strData = fw.readframes(nframes)
waveData = np.frombuffer(strData, dtype=np.int16)
waveData = waveData * 1.0 / max(abs(waveData))  # normalization
fw.close()

# calculate volume
frameSize = 256
overLap = 128
volume11 = calVolume(waveData, frameSize, overLap)
volume12 = calVolumeDB(waveData, frameSize, overLap)

# plot the wave
time = np.arange(0, nframes) * (1.0 / framerate)
time2 = np.arange(0, len(volume11)) * (frameSize - overLap) * 1.0 / framerate
pl.figure(figsize=(15, 9))
pl.subplot(311)
pl.plot(time, waveData)
pl.ylabel("Amplitude")
pl.subplot(312)
pl.plot(time2, volume11)
pl.ylabel("absSum")
pl.subplot(313)
pl.plot(time2, volume12, c="g")
pl.ylabel("Decibel(dB)")
pl.xlabel("time (seconds)")
pl.show()

4-2 音高

import wave
import numpy as np
import pylab as pl

# ============ test the algorithm =============
# read wave file and get parameters.
fw = wave.open('Ring08.wav', 'rb')
params = fw.getparams()
print(params)
nchannels, sampwidth, framerate, nframes = params[:4]
strData = fw.readframes(nframes)
# waveData = np.fromstring(strData, dtype=np.int16)
waveData = np.frombuffer(strData, np.int16)
waveData = waveData * 1.0 / max(abs(waveData))  # normalization
fw.close()

# plot the wave
time = np.arange(0, len(waveData)) * (1.0 / framerate)

index1 = 10000.0 / framerate
index2 = 10512.0 / framerate
index3 = 15000.0 / framerate
index4 = 15512.0 / framerate

pl.subplot(311)
pl.plot(time, waveData)
pl.plot([index1, index1], [-1, 1], 'r')
pl.plot([index2, index2], [-1, 1], 'r')
pl.plot([index3, index3], [-1, 1], 'g')
pl.plot([index4, index4], [-1, 1], 'g')
pl.xlabel("time (seconds)")
pl.ylabel("Amplitude")

pl.subplot(312)
pl.plot(np.arange(512), waveData[10000:10512], 'r')
pl.plot([59, 59], [-1, 1], 'b')
pl.plot([169, 169], [-1, 1], 'b')
print(1 / ((169 - 59) * 1.0 / framerate))
pl.xlabel("index in 1 frame")
pl.ylabel("Amplitude")

pl.subplot(313)
pl.plot(np.arange(512), waveData[15000:15512], 'g')
pl.xlabel("index in 1 frame")
pl.ylabel("Amplitude")
pl.show()

4-3 波形频谱

import librosa
import librosa.display
import matplotlib.pyplot as plt

# Load a wav file
y, sr = librosa.load('PCM.wav', sr=None)
# extract mel spectrogram feature
melspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)
# convert to log scale
logmelspec = librosa.power_to_db(melspec)
plt.figure(figsize=(15, 10))
# plot a wavform
plt.subplot(2, 1, 1)
librosa.display.waveshow(y, sr)
plt.title('Beat wavform')
# plot mel spectrogram
plt.subplot(2, 1, 2)
librosa.display.specshow(logmelspec, sr=sr, x_axis='time', y_axis='mel')
plt.title('Mel spectrogram')
plt.tight_layout()  # 保证图不重叠
plt.show()

4-4 PCM

import numpy as np
import librosa
import matplotlib.pyplot as plt


def PCM_encode(x):
    n = len(x)
    out = np.zeros((n, 8))
    for i in range(n):
        # 符号位
        if x[i] > 0:
            out[i, 0] = 1
        else:
            out[i, 0] = 0
        # 数据位
        if abs(x[i]) < 32:
            out[i, 1], out[i, 2], out[i, 3], step, st = 0, 0, 0, 2, 0
        elif abs(x[i]) < 64:
            out[i, 1], out[i, 2], out[i, 3], step, st = 0, 0, 1, 2, 32
        elif abs(x[i]) < 128:
            out[i, 1], out[i, 2], out[i, 3], step, st = 0, 1, 0, 4, 64
        elif abs(x[i]) < 256:
            out[i, 1], out[i, 2], out[i, 3], step, st = 0, 1, 1, 8, 128
        elif abs(x[i]) < 512:
            out[i, 1], out[i, 2], out[i, 3], step, st = 1, 0, 0, 16, 256
        elif abs(x[i]) < 1024:
            out[i, 1], out[i, 2], out[i, 3], step, st = 1, 0, 1, 32, 512
        elif abs(x[i]) < 2048:
            out[i, 1], out[i, 2], out[i, 3], step, st = 1, 1, 0, 64, 1024
        else:
            out[i, 1], out[i, 2], out[i, 3], step, st = 1, 1, 1, 128, 2048

        if abs(x[i]) >= 4096:
            out[i, 1:] = np.array([1, 1, 1, 1, 1, 1])
        else:
            tmp = bin(int((abs(x[i]) - st) / step)).replace('0b', '')
            tmp = '0' * (4 - len(tmp)) + tmp
            t = [int(k) for k in tmp]
            out[i, 4:] = t
    return out.reshape(8 * n)


def PCM_decode(ins, v):
    inn = ins.reshape(len(ins) // 8, 8)
    slot = np.array([0, 32, 64, 128, 256, 512, 1024, 2048])
    step = np.array([2, 2, 4, 8, 16, 32, 64, 128])
    out = np.zeros(len(ins) // 8)
    for i in range(inn.shape[0]):
        sgn = 2 * inn[i, 0] - 1
        tmp = int(inn[i, 1] * 4 + inn[i, 2] * 2 + inn[i, 3])
        st = slot[tmp]
        dt = (inn[i, 4] * 8 + inn[i, 5] * 4 + inn[i, 6] * 2 + inn[i, 7]) * step[tmp] + 0.5 * step[tmp]
        out[i] = sgn * (st + dt) / 4096 * v
    return out


plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

data, sr = librosa.load('Ring08.wav')

sxx = np.array(list(map(int, data * 4096)))

y = PCM_encode(sxx)

yy = PCM_decode(y, 1)

plt.subplot(3, 1, 1)
plt.plot(data)
plt.title('编码前')

plt.subplot(3, 1, 2)
plt.plot(yy)
plt.title('解码后')

plt.subplot(3, 1, 3)
plt.plot(yy - data)
plt.title('误差')
plt.show()

五.   实验结果与分析

4-1 音量

aeiou.wav

sunday.wav

结果

 

 

4-2 音高

aeiou.wav

sunday.wav

Ring08.wav

结果

       

4-3 波形频谱

aeiou.wav

sunday.wav

PCM.wav

结果

4-4 PCM

PCM.wav

sunday.wav

Ring08.wav

结果

六.实验心得体会

通过本次实验,使我对于音频文件有了更深的理解,明白了音频的一些基本属性,如音高,音量等以及对于波形频谱的输出和PCM算法有了一定的认识.

以上是关于数字图像处理原理与应用的内容提要的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中创建新闻提要 UI

数字图像处理边缘检测与图像分割

python《多媒体技术与应用》实验报告「数字音频处理」

tableView 与 imageView 与情节提要?

《数字图像处理原理与实践(MATLAB版)》一书之代码Part1

Vite的原理介绍及应用