赞
踩
图像的模糊特征平面:假设原始图像为 I ( x , y ) I(x,y) I(x,y),其中 x x x 和 y y y 分别表示图像的水平和垂直方向的坐标。模糊特征平面可以表示为 B ( x , y , θ ) B(x,y,\theta) B(x,y,θ),其中 θ \theta θ 是一个旋转角度参数,表示模糊核函数的旋转角度。 B ( x , y , θ ) B(x,y,\theta) B(x,y,θ) 表示在 ( x , y ) (x,y) (x,y) 处应用旋转角度为 θ \theta θ 的模糊核函数时得到的图像模糊程度
通常,模糊核函数可以表示为 h ( x , y , θ ) h(x,y,\theta) h(x,y,θ),其中 ( x , y ) (x,y) (x,y) 表示模糊核函数中心的坐标, θ \theta θ 表示旋转角度。那么,模糊特征平面可以通过将原始图像 I ( x , y ) I(x,y) I(x,y) 和模糊核函数 h ( x , y , θ ) h(x,y,\theta) h(x,y,θ) 卷积得到
B ( x , y , θ ) = I ( x , y ) ∗ h ( x , y , θ ) B(x,y,\theta)=I(x,y)*h(x,y,\theta) B(x,y,θ)=I(x,y)∗h(x,y,θ)
在实际应用中,模糊特征平面常常被用来进行图像识别和分类等任务,因为它可以帮助我们理解和描述图像模糊程度的特征
算法步骤:
①:将图像从空间灰度域变换到模糊域
μ m n = T ( x m n ) = [ 1 + x max − x m n F d ] − F e \mu_{m n}=T\left(x_{m n}\right)=\left[1+\frac{x_{\max }-x_{m n}}{F_{d}}\right]^{-F_{e}} μmn=T(xmn)=[1+Fdxmax−xmn]−Fe
②:在模糊域,对模糊特征进行一定的增强
{
μ
m
n
′
=
I
r
(
μ
m
u
)
=
{
2
μ
m
u
2
,
0
≤
μ
m
n
<
0.5
1
−
2
(
1
−
μ
m
u
)
2
,
0.5
≤
μ
m
u
<
1
I
r
(
μ
m
n
)
=
I
1
(
I
r
−
1
(
μ
m
u
)
)
\left\{\begin{array}{ll}\mu_{m n}^{\prime}=I_{r}\left(\mu_{m u}\right)=\left\{\begin{array}{cl}2 \mu_{m u}^{2}, & 0 \leq \mu_{m n}<0.5 \\1-2\left(1-\mu_{m u}\right)^{2}, & 0.5 \leq \mu_{m u}<1\end{array}
③:逆变换后,得到新的模糊增强后的输出图像
z m n = I − 1 ( μ m n ′ ) = x max − F d [ ( μ m n ′ ) 1 F e − 1 ] z_{m n}=I^{-1}\left(\mu_{m n}^{\prime}\right)=x_{\max }-F_{d}\left[\left(\mu_{m n}^{\prime}\right)^{\frac{1}{F_{e}}}-1\right] zmn=I−1(μmn′)=xmax−Fd[(μmn′)Fe1−1]
matlab实现
Image=imread('Beautiful.jpg'); [height width]=size(Image); Image=double(Image); xmax=max(max(Image)); xc=mean2(Image); Fe=2; Fd=(xmax-xc)/(2^(1/Fe)-1); u=(1+(xmax-Image)/Fd).^(-Fe); times=2; %设置迭代次数 for k=1:times for i=1:height for j=1:width if u(i,j)<0.5 u(i,j)=2*u(i,j)^2; else u(i,j)=1-2*(1-u(i,j))^2; end end end end NewImage=xmax-Fd.*(u.^(-1/Fe)-1); figure;imshow(uint8(NewImage));title('基于模糊技术的增强');
Python实现:
import cv2 import numpy as np import matplotlib.pyplot as plt # 读入图像 image = cv2.imread('Beautiful.jpg', cv2.IMREAD_GRAYSCALE) # 获取图像高度和宽度 height, width = image.shape # 将图像转换为浮点数类型 image = image.astype(float) # 计算最大灰度值和图像的均值 xmax = np.max(image) xc = np.mean(image) # 计算 Fe 和 Fd Fe = 2 Fd = (xmax - xc) / (2 ** (1 / Fe) - 1) # 计算模糊增强函数 u = (1 + (xmax - image) / Fd) ** (-Fe) # 设置迭代次数 times = 2 # 迭代更新模糊增强函数 for k in range(times): for i in range(height): for j in range(width): if u[i, j] < 0.5: u[i, j] = 2 * u[i, j] ** 2 else: u[i, j] = 1 - 2 * (1 - u[i, j]) ** 2 # 计算增强后的图像 new_image = xmax - Fd * ((u) ** (-1 / Fe) - 1) # 显示增强后的图像 plt.imshow(new_image.astype(np.uint8), cmap='gray') plt.title('基于模糊技术的增强') plt.show()
真彩色:是一种能够显示全部或大部分人类可见光谱的图像呈现方式。在数码摄影、计算机图形学和显示技术中,具有真彩色的图像通常由红、绿和蓝三种原色光以不同强度的组合来呈现,每种原色的强度值用 8 位二进制数存储,因此在每个像素点上可以存储更精细的颜色信息,呈现出更真实的颜色
假彩色:是指在图像处理中为了突出某些特定的信息或者达到某种目的而对图像进行的一种虚构的颜色着色方式,一般来说,这种颜色表示方式是人为设定的,不一定与真实颜色有任何关系。例如,在地球观测中,有时使用假彩色来表示不同种类的地物或者地表特征,如植被、水域、城市等,这样可以更清晰地区分不同的地物或者地表特征
伪彩色:每个像素的颜色不是由每个基色分量的数值直接决定的,而是把像素值当作彩色查找表(CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值产生的彩色称为伪彩色。彩色查找表CLUT是一个事先做好的表,表项入口地址也称为索引号。例如16种颜色的查找表,0号索引对应黑色,15号索引对应白色
通俗易懂地说,伪彩色就是在黑白灰度图像的基础上,通过颜色的变化突出图像的特定信息。例如,一张黑白皱巴巴的纸看上去可能很普通,但如果将图像变换成伪彩色,加入颜色的更丰富表现,则可能会呈现出更多的信息。同样,对于一张医学图像,通过伪彩色的增强方式,就能凸显出人体不同器官或疾病的具体位置和特征
假设我们想在地图上显示不同地区的温度,我们可以把地图上的温度数据叠加为灰度图像,此时较暗的区域代表温度比较低、较亮的区域温度比较高。这样的表示其实有一定缺陷,第一个原因人类视觉系统对灰度强度的变化不灵敏,能够区分的灰度级一般只有二十几个,而对不同亮度和色调的彩色图像的分辨力能力却可以达到灰度分辨能力的数百倍以上;第二个原因是因为我们可以用不同的颜色代表不同的意义,比如用蓝色代表温度较低、红色代表温度较高
因此彩色增强处理图像的主要目的是为了改善图像的视觉效果和识别能力。对于很多实际应用中的图像,例如医学影像、卫星遥感图像等,单纯的灰度图像可能不足以满足人类视觉的需求,而加入彩色信息则可以让图像更容易被人眼识别和理解。具体来说,彩色增强处理图像具有以下好处:
彩色增强在图像增强中应用十分广泛,常见的彩色增强技术主要分为如下两类:
伪彩色增强基本原理:伪彩色增强是一种将灰度图像转化为彩色图像的方法,它的基本原理是将灰度图像中的每个像素的灰度值映射到一个伪彩色表(也称为颜色映射表)上,从而生成一张带有伪彩色的图像。通常情况下,伪彩色表会根据不同的应用需求而定制,以达到最佳的图像增强效果
% 读入卫星图
I = imread(SatelliteMap.jpg);
% 定义颜色映射
map = jet(256);
% 将灰度图像转换为伪彩色图像
PesudoImage) = ind2rgb(I, map);
% 显示伪彩色图像
subplot(1,2,1),imshow(I),title('原图');
subplot(1,2,2),imshow(PesudoImage),title('伪彩色图');
密度分割法:这是伪彩色处理技术中最基本、最简单的一种方法。该方法的主要原理是将输入图像的灰度值分成若干个密度区间,每个密度区间分配一种颜色,生成一副带有伪彩色的图像。如下图,设一幅灰度图像 f ( x , y ) f(x,y) f(x,y)可以看作坐标 ( x , y ) (x,y) (x,y)的一个密度函数,把此图像的灰度分为若干区间,即相当于用一些和坐标平面平行的平面在相交区域切割此密度函数
实现如下效果
matlab实现:
clear all;close all; I = double(rgb2gray(imread('feibu.png'))); [M N] = size(I); I2 = zeros(M, N, 3); %初始化三通道 for x = 1 : M for y = 1 : N if I(x, y) <= 127 % R I2(x, y, 1) = 0; elseif I(x, y) <= 191 I2(x, y, 1) = 4 * I(x, y) - 510; else I2(x, y, 1) = 255; end if I(x, y) <= 63 % G I2(x, y, 2) = 254 - 4 * I(x, y); elseif I(x, y) <= 127 I2(x, y, 2) = 4 * I(x, y) - 254; elseif I(x, y) <= 191 I2(x, y, 2) = 255; else I2(x, y, 2) = 1022 - 4 * I(x, y); end if I(x, y) <= 63 % B I2(x, y, 3) = 255; elseif I(x, y) <= 127 I2(x, y, 3) = 510 - 4 * I(x, y); else I2(x, y, 3) = 0; end end end imshow(uint8(I2));
Python实现:
import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图像 I = cv2.imread('feibu.png', cv2.IMREAD_GRAYSCALE) M, N = I.shape # 初始化三通道 I2 = np.zeros((M, N, 3), dtype=np.float32) # RGB 转换 for x in range(M): for y in range(N): if I[x, y] <= 127: # R I2[x, y, 0] = 0 elif I[x, y] <= 191: I2[x, y, 0] = 4 * I[x, y] - 510 else: I2[x, y, 0] = 255 if I[x, y] <= 63: # G I2[x, y, 1] = 254 - 4 * I[x, y] elif I[x, y] <= 127: I2[x, y, 1] = 4 * I[x, y] - 254 elif I[x, y] <= 191: I2[x, y, 1] = 255 else: I2[x, y, 1] = 1022 - 4 * I[x, y] if I[x, y] <= 63: # B I2[x, y, 2] = 255 elif I[x, y] <= 127: I2[x, y, 2] = 510 - 4 * I[x, y] else: I2[x, y, 2] = 0 # 显示图像 I2 = I2.astype(np.uint8) plt.imshow(I2) plt.show()
彩色变换法:这种变换方法是对输入图像的灰度值实现3种独立变换,按灰度值映射成不同大小的红、绿、蓝三基色值。然后,同他们分别去控制彩色显示器的红、绿、蓝电子枪,以产生相应的彩色显示
下面是最常用的映射关系
实现如下效果
matlab实现:
clc; % 清空命令窗口 % 读取名为feibu.png的图像并转换为灰度图像 I=imread('feibu.png'); I=rgb2gray(I); % 显示灰度图像 figure(1),imshow(I); % 将灰度图像转换为double类型的数组,并获取图像的尺寸和灰度级数 I=double(I); [M,N]=size(I); L=256; % 使用双重循环遍历每个像素,并根据其灰度级别进行处理,生成伪彩色图像 for i=1:M for j=1:N if I(i,j)<=L/4 R(i,j)=0; G(i,j)=4*I(i,j); B(i,j)=L; elseif I(i,j)<=L/2 R(i,j)=0; G(i,j)=L; B(i,j)=-4*I(i,j)+2*L; elseif I(i,j)<=3*L/4 R(i,j)=4*I(i,j)-2*L; G(i,j)=L; B(i,j)=0; else R(i,j)=L; G(i,j)=-4*I(i,j)+4*L; B(i,j)=0; end end end % 使用双重循环遍历每个像素,并将伪彩色值存储到OUT数组中 for i=1:M for j=1:N OUT(i,j,1)=R(i,j); OUT(i,j,2)=G(i,j); OUT(i,j,3)=B(i,j); end end % 将OUT数组的值除以256,生成0到1之间的浮点数,用于显示伪彩色图像 OUT=OUT/256; % 显示伪彩色图像 figure(2),imshow(OUT)
Python实现:
import cv2 import numpy as np from matplotlib import pyplot as plt # 读取名为feibu.png的图像并转换为灰度图像 img = cv2.imread('feibu.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 显示灰度图像 plt.figure() plt.imshow(gray, cmap='gray') # 将灰度图像转换为double类型的数组,并获取图像的尺寸和灰度级数 gray = gray.astype(np.float64) M, N = gray.shape L = 256 # 使用双重循环遍历每个像素,并根据其灰度级别进行处理,生成伪彩色图像 R, G, B = np.zeros_like(gray), np.zeros_like(gray), np.zeros_like(gray) for i in range(M): for j in range(N): if gray[i,j] <= L/4: R[i,j] = 0 G[i,j] = 4 * gray[i,j] B[i,j] = L elif gray[i,j] <= L/2: R[i,j] = 0 G[i,j] = L B[i,j] = -4 * gray[i,j] + 2 * L elif gray[i,j] <= 3 * L/4: R[i,j] = 4 * gray[i,j] - 2 * L G[i,j] = L B[i,j] = 0 else: R[i,j] = L G[i,j] = -4 * gray[i,j] + 4 * L B[i,j] = 0 # 将RGB数组沿第三个轴合并为单个数组 out = np.dstack((R, G, B)) # 将OUT数组的值除以256,生成0到1之间的浮点数,用于显示伪彩色图像 out = out / 256.0 # 显示伪彩色图像 plt.figure() plt.imshow(out) plt.show()
频域伪彩色处理:频率域伪彩色增强时,先把灰度图像
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。