文章目录
- 一:Radon变换
- (1)Radon变换原理
- (2)Radon变换实现
- (3)Radon变换性质
- (4)Radon变换应用
- 二:小波变换
- (1)小波
- A:定义
- B:实例
- (2)一维小波变换
- A:连续小波变换
- B:时频特性
- C:离散小波变换
- D:正交小波
- (3)二维小波变换
- A:定义
- B:图像小波分解
- C:程序
- (4)小波变换在图像处理中的应用
一:Radon变换
Radon变换:是一种用于将图像从空间域转换到投影域的数学工具,其基本思想是将图像中每个点的灰度值投影到一组直线上,然后将这些投影合并在一起形成投影域。Radon变换可以用于多种图像处理任务,包括图像重建、特征提取、图像分割等
(1)Radon变换原理
Radon变换原理:给定一个函数f(x,y)f(x, y)f(x,y),Radon变换将其投影到一组线上,得到一组投影值p(θ,s)p(\theta, s)p(θ,s)。其中θ\thetaθ表示投影线的角度,sss表示投影线与原点的距离。具体而言,对于每个角度θ\thetaθ,Radon变换将在直线lθ,sl_{\theta,s}lθ,s上对函数f(x,y)f(x, y)f(x,y)进行积分,其中lθ,sl_{\theta,s}lθ,s是距离原点为sss,与xxx轴成θ\thetaθ角度的直线。投影值p(θ,s)p(\theta, s)p(θ,s)即为积分结果
可以将Radon变换看作是从二维函数到一维函数的映射,其中每个投影值p(θ,s)p(\theta, s)p(θ,s)表示了投影线lθ,sl_{\theta,s}lθ,s上的一维信息。因此,Radon变换可以用于从一组投影值中重建原始函数f(x,y)f(x, y)f(x,y)。这种逆变换被称为逆Radon变换或反投影
(2)Radon变换实现
MATLAB实现:相关函数如下,具体解释可看MATLAB帮助手册
[R,xp]=radon(I,theta)
:Radon变换是一种用于图像处理中的特征提取的方法,可以用于检测图像中的直线特征I
为输入的图像theta
为变换角度R
为变换后的结果xp
为变换后的坐标
程序1:对图像进行指定方向上的Radon变换
- 首先,代码读取名为’block.bmp’的灰度图像,并将其分别进行0度和45度方向的Radon变换
- 然后,使用subplot函数将原图像和两个变换后的图像显示在同一张图中,方便比较
- 最后,代码展示了两个变换后的图像的Radon变换曲线,分别对应0度和45度方向。这些曲线可以用于检测图像中的直线特征
clear,clc,close all;
Image=rgb2gray(imread('block.bmp'));
[R1,X1]=radon(Image,0);
[R2,X2]=radon(Image,45);
subplot(131),imshow(Image),title('原图');
subplot(132),plot(X1,R1),title('0度方向的radon变换曲线');
subplot(133),plot(X2,R2),title('45度方向的radon变换曲线');
程序2:对图像进行Radon变换和反变换
- 首先,它读取了名为 “block.bmp” 的图像,并将其转换为灰度图像
- 然后,它使用 “radon” 函数计算了图像在 0 到 180 度方向上的 Radon 变换曲线集合,并找到了这些曲线集合中的最大值
- 接着,它使用 “iradon” 函数对这些曲线进行反变换,从而重建出原始图像
- 最后,它使用 “subplot” 函数将原始图像、Radon 变换曲线集合和重建图像显示在同一张图上
clear,clc,close all;
Image=rgb2gray(imread('block.bmp'));
theta=0:10:180;
[R,X]=radon(Image,theta);
C=max(R);
result=iradon(R,theta);
subplot(131),imshow(Image),title('原图');
subplot(132),imagesc(theta,X,R),title('0-180度方向的radon变换曲线集合');
subplot(133),image(result),title('重建图像');
Python实现:使用Python实现上述同样的功能
程序1:对图像进行指定方向上的Radon变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']# Load the image
Image = cv2.imread('block.bmp', cv2.IMREAD_GRAYSCALE)# Perform Radon transform
theta = np.arange(0, 180, 1)
R = cv2.radon(Image, theta)# Display the results
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(10, 5))
ax1.imshow(Image, cmap='gray')
ax1.set_title('Original Image')
ax2.plot(R[:, 0])
ax2.set_title('Radon Transform (0 degrees)')
ax3.plot(R[:, 45])
ax3.set_title('Radon Transform (45 degrees)')
plt.show()
程序2:对图像进行Radon变换和反变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']# Load the image
Image = cv2.imread('block.bmp', cv2.IMREAD_GRAYSCALE)# Perform Radon transform
theta = np.arange(0, 181, 10)
R = cv2.radon(Image, theta)# Get the maximum value of the Radon transform
C = np.max(R)# Perform inverse Radon transform
result = cv2.remap(R, theta, None, cv2.INTER_LINEAR)# Display the images using matplotlib
fig, axs = plt.subplots(1, 3, figsize=(10, 10))
axs[0].imshow(Image, cmap='gray')
axs[0].set_title('Original Image')
axs[1].imshow(R, cmap='gray', extent=(0, 180, 0, R.shape[0]), aspect='auto')
axs[1].set_title('Radon Transform')
axs[2].imshow(result, cmap='gray')
axs[2].set_title('Reconstructed Image')
plt.show()
(3)Radon变换性质
线性:Radon变换是线性的。即,对于任意常数a,ba,ba,b和函数f,gf,gf,g,有以下等式成立
R{af+bg}=aR{f}+bR{g}\mathcal{R}\{a f+b g\}=a \mathcal{R}\{f\}+b \mathcal{R}\{g\} R{af+bg}=aR{f}+bR{g}
其中R⋅\mathcal{R}{\cdot}R⋅表示Radon变换。这个性质意味着可以通过对原始函数进行线性组合来计算其Radon变换
平移性:Radon变换是平移不变的。即,对于函数f(x,y)f(x,y)f(x,y)和距离向量d=(dx,dy)d=(d_x,d_y)d=(dx,dy),有以下等式成立
R{f(x−dx,y−dy)}(θ,s)=R{f(x,y)}(θ,s−dxcosθ−dysinθ)\mathcal{R}\left\{f\left(x-d_{x}, y-d_{y}\right)\right\}(\theta, s)=\mathcal{R}\{f(x, y)\}\left(\theta, s-d_{x} \cos \theta-d_{y} \sin \theta\right) R{f(x−dx,y−dy)}(θ,s)=R{f(x,y)}(θ,s−dxcosθ−dysinθ)
这个性质意味着可以通过平移原始函数来计算其在不同位置上的Radon变换
相似性:Radon变换是相似变换不变的。即,对于函数f(x,y)f(x,y)f(x,y)和比例因子aaa,有以下等式成立
R{f(ax,ay)}(θ,s)=1∣a∣R{f(x,y)}(θ,s∣a∣)\mathcal{R}\{f(a x, a y)\}(\theta, s)=\frac{1}{|a|} \mathcal{R}\{f(x, y)\}\left(\theta, \frac{s}{|a|}\right) R{f(ax,ay)}(θ,s)=∣a∣1R{f(x,y)}(θ,∣a∣s)
微分:Radon变换具有微分性质。即,对于函数f(x,y)f(x,y)f(x,y),有以下等式成立
∂∂sR{f(x,y)}(θ,s)=−∫−∞∞∂∂yf(x,y)cosθ−∂∂xf(x,y)sinθdx\frac{\partial}{\partial s} \mathcal{R}\{f(x, y)\}(\theta, s)=-\int_{-\infty}^{\infty} \frac{\partial}{\partial y} f(x, y) \cos \theta-\frac{\partial}{\partial x} f(x, y) \sin \theta d x ∂s∂R{f(x,y)}(θ,s)=−∫−∞∞∂y∂f(x,y)cosθ−∂x∂f(x,y)sinθdx
这个性质意味着可以通过对Radon变换进行微分来计算原始函数的导数
(4)Radon变换应用
Radon变换应用:
- CT图像重建:计算机断层成像(CT)是一种医学成像技术,通过对人体进行X射线扫描来获取其内部结构的三维图像。CT图像可以通过Radon变换进行重建,将CT扫描的投影数据转换为图像数据。这是由于CT扫描是在不同方向上获取的一系列投影图像,而Radon变换可以将这些投影数据转换为图像数据
- 边缘检测:边缘是图像中最重要的特征之一,因为它们可以提供关于图像中物体的轮廓和形状的信息。Radon变换可以用于检测边缘,因为边缘在投影域中表现出明显的特征。通过检测Radon变换后的图像中的峰值,可以确定原始图像中的边缘位置
- 特征提取:Radon变换还可以用于提取图像中的其他特征,例如纹理和形状。通过计算Radon变换的角度分布函数,可以获得图像中纹理和形状的信息
- 图像分割:图像分割是将图像分成若干个互不重叠的区域的过程。Radon变换可以用于图像分割,因为不同区域的投影数据在投影域中表现出不同的特征。通过分析Radon变换后的图像,可以确定原始图像中不同区域的位置
二:小波变换
小波变换:是一种数学工具,用于将信号分解成不同的频率组件。类似于频谱分析,但小波变换可以捕捉到瞬态信号中的时间和频率信息。简单来说,它可以将信号分成多个不同时间长度和频率范围的子信号,以便更好地理解和处理原始信号
(1)小波
A:定义
小波:小波变换中的“小波”指的是一种基本的函数,可以用于将信号分解成不同的频率组件。这些小波函数具有紧凑的支撑和可变的频率和时间分辨率,使得它们可以在时域和频域之间转换,并能够更好地捕捉信号中的局部特征。数学上,小波是一种能够满足一定条件的局部有限能量函数,通常被定义为具有均值为零的波形函数和尺度函数的线性组合。通过将信号与不同尺度和位置的小波函数进行内积运算,可以得到信号在不同频率上的分解系数,进而实现小波变换。设函数ψ(t)\psi(t)ψ(t)满足∫Rψ(t)dt=0\int_{R} \psi(t) d t=0∫Rψ(t)dt=0,对其进行平移和伸缩产生函数族:ψa,b(t)=1aψ(t−ba),a,b∈R,a≠0\psi_{a, b}(t)=\frac{1}{\sqrt{a}} \psi\left(\frac{t-b}{a}\right),a,b\in R,a\not=0ψa,b(t)=a1ψ(at−b),a,b∈R,a=0,ψ(t)\psi(t)ψ(t)称为基小波或母小波,α\alphaα为伸缩因子,bbb为平移因子,ψa,b(t)\psi_{a,b}(t)ψa,b(t)为ψ(t)\psi(t)ψ(t)生成的连续小波。小波有如下特点
- 紧支撑性: 小波函数在小范围内波动,能量有限,超出一定范围时,波动幅度迅速衰减,具有速降性
- 变化性: 小波函数随尺度因子的变化而变化
- KKK阶消失矩: ∫RtkΨ(t)dt=0,k=0,1,⋯,K−1\begin{array}{l}\int_{R} t^{k} \Psi(t) d t=0 ,\quad k=0,1, \cdots, K-1\end{array}∫RtkΨ(t)dt=0,k=0,1,⋯,K−1
B:实例
Haar小波:下图为Harr小波及其频谱
{ΨH(t)={10≤t<1/2−11/2≤t<10其他 ΨH(ω)=1−2eiω2+e−iωωi\left\{\begin{array}{l}\Psi_{H}(t)=\left\{\begin{array}{cc}1 & 0 \leq t<1 / 2 \\-1 & 1 / 2 \leq t<1 \\0 & \text { 其他 }\end{array}\right. \\\Psi_{H}(\omega)=\frac{1-2 e^{\frac{i \omega}{2}}+e^{-i \omega}}{\omega i}\end{array}\right. ⎩⎨⎧ΨH(t)=⎩⎨⎧1−100≤t<1/21/2≤t<1 其他 ΨH(ω)=ωi1−2e2iω+e−iω
Morlet小波:下图为Morlet小波及其频谱
{Ψ(t)=π−1/4(e−iω0t−e−ω02/2)e−t2/2Ψ(ω)=π−1/4[e−(ω−ω0)2/2−e−ω02/2e−ω2/2]\left\{\begin{array}{l}\Psi(t)=\pi^{-1 / 4}\left(e^{-i \omega_{0} t}-e^{-\omega_{0}^{2} / 2}\right) e^{-t^{2} / 2} \\\Psi(\omega)=\pi^{-1 / 4}\left[e^{-\left(\omega-\omega_{0}\right)^{2} / 2}-e^{-\omega_{0}^{2} / 2} e^{-\omega^{2} / 2}\right]\end{array}\right. ⎩⎨⎧Ψ(t)=π−1/4(e−iω0t−e−ω02/2)e−t2/2Ψ(ω)=π−1/4[e−(ω−ω0)2/2−e−ω02/2e−ω2/2]
Mexico草帽小波:下图为Mexico草帽小波及其频谱
Ψ(t)=(23π−1/4)(1−t2)e−t2/2\Psi(t)=\left(\frac{2}{\sqrt{3}} \pi^{-1 / 4}\right)\left(1-t^{2}\right) e^{-t^{2} / 2} Ψ(t)=(32π−1/4)(1−t2)e−t2/2