基于Matlab的定容燃烧弹纹影喷雾图像处理
纹影图像处理
纹影法原理
光强差异的偏转角与折射率梯度成正比,通过流场的折射率反应密度变化。
引起密度变化的因素
- 油束本身与环境间的密度差异 ;
- 容弹内部热氛围不够均一、稳定,热量交换会引起气流扰动 ;
- 油束射入引起的扰动。
产生的问题
环境气体扰动引起的密度变化会对喷雾本体的采集产生影响,使喷雾边缘难以识别。
解决思路
- 图像采集前,调整实验仪器(主要是背景光源的亮度与刀口的开度),在保证喷雾边缘可见的前提下,适当降低对比度,减小气流扰动造成的明暗变化;
- 建立时序标准差图像;
- “阈值法”消除噪点;
- 根据距离剔除远离喷雾区域的孤立点。
不同标准差计算方法
局部标准差
计算单帧图像
I
i
I_i
Ii在图像中某一点
I
i
(
x
,
y
)
I_i(x,y)
Ii(x,y)
3
×
3
3×3
3×3邻域的标准差
I
i
−
L
o
c
a
l
S
t
d
(
x
,
y
)
I_{i-LocalStd}(x,y)
Ii−LocalStd(x,y),计算公式如下:
I
i
(
x
,
y
)
‾
=
∑
r
=
−
1
1
∑
c
=
−
1
1
I
i
(
x
+
r
,
y
+
c
)
9
I
i
−
L
o
c
a
l
S
t
d
(
x
,
y
)
=
∑
r
=
−
1
1
∑
c
=
−
1
1
[
I
i
(
x
+
r
,
y
+
c
)
−
I
i
(
x
,
y
)
‾
]
2
8
\begin{aligned} & \overline {{I_i}(x,y)} = \frac{{\sum\limits_{r = - 1}^1 {\sum\limits_{c = - 1}^1 {{I_i}(x + r,y + c)} } }}{9} \\ & {I_{i - LocalStd}}(x,y) = \sqrt {\frac{{\sum\limits_{r = - 1}^1 {\sum\limits_{c = - 1}^1 {{{\left[ {{I_i}(x + r,y + c) - \overline {{I_i}(x,y)} } \right]}^2}} } }}{8}} \\ \end{aligned}
Ii(x,y)=9r=−1∑1c=−1∑1Ii(x+r,y+c)Ii−LocalStd(x,y)=8r=−1∑1c=−1∑1[Ii(x+r,y+c)−Ii(x,y)]2
时序标准差
将相邻三帧图像
I
i
−
1
I_{i-1}
Ii−1、
I
i
I_{i}
Ii、
I
i
+
1
I_{i+1}
Ii+1作为一组进行处理,对三帧图像中同一位置
(
x
,
y
)
(x, y)
(x,y) 的像素点求标准差作为该组输出图像的值
I
i
−
T
e
m
p
o
r
a
l
S
t
d
(
x
,
y
)
I_{i-TemporalStd}(x,y)
Ii−TemporalStd(x,y),计算公式如下:
I
(
x
,
y
)
‾
=
∑
i
=
−
1
1
I
i
(
x
,
y
)
3
I
i
−
T
e
m
p
o
r
a
l
S
t
d
(
x
,
y
)
=
∑
i
=
−
1
1
[
I
i
(
x
,
y
)
−
I
(
x
,
y
)
‾
]
2
2
\begin{aligned} & \overline {I(x,y)} = \frac{{\sum\limits_{i = - 1}^1 {{I_i}(x,y)} }}{3} \\ & {I_{i - TemporalStd}}\left( {x,{\text{ }}y} \right) = \sqrt {\frac{{\sum\limits_{i = - 1}^1 {{{\left[ {{I_i}(x,y) - \overline {I(x,y)} } \right]}^2}} }}{2}} \\ \end{aligned}
I(x,y)=3i=−1∑1Ii(x,y)Ii−TemporalStd(x, y)=2i=−1∑1[Ii(x,y)−I(x,y)]2
最后按照原图像的灰度对标准差矩阵进行标准化处理
不同标准差处理图像的对比
降噪处理
部分喷雾图像的降噪处理方法见文章。
此处采用阈值处理、中值滤波及形态学运算对标准差图像
I
S
t
d
I_{Std}
IStd进行降噪处理,输出二值图
B
W
BW
BW。
孤立点剔除
以上操作能够有效去除大多数面积较小的噪点,对于远离喷雾区域的较大面积的孤立点,无法通过滤波处理进行去除,而采用形态学开运算又会抹去喷雾区域的点造成喷雾区域缩小,因此需要根据孤立点到其他连通域的距离判断该点是否需要剔除。程序段如下:
[L,label] = bwlabel(BW);
distance = [];
if max(max(label))>1 %若只有一个连通区域则不必进行距离判断
for label_num = 1 : label
[x0,y0]=find(L==label_num);
[x,y]=find(L~=label_num & L~=0);
tested = [x0 y0]; %检测区域
others = [x y]; %其他区域
new_others = cat(1,tested,others);
D = pdist(new_others); %计算成对观测值之间的欧几里德距离
Z = squareform(D); %squareform 返回一个对称矩阵
%其中 Z(i,j) 对应于观测值 i 和 j 之间的两两距离
distance(label_num) = min(min(Z(1:size(x0,1),size(x0,1)+1:end)));
d_max = max(max(Z(1:size(x0,1),1:size(x0,1))));
%检测区域内两点间的最大距离
if distance(label_num)>=2*d_max
BW(x0(:),y0(:))=0; %若检测区域距其他区域超过2d_max,则删除检测区域
end
end
end
1. 程序中设置的距离阈值为检测区域内两点间最大距离的2倍
2
d
m
a
x
2d_{max}
2dmax,此处阈值可根据实际情况进行调整;
2. 程序通过判断某孤立域内所有点到另一孤立域内所有点的距离,可将判定对象替换为孤立域边界上的点或孤立域的重心以缩短计算时间。
重构喷雾结构
经过以上降噪、去孤立点的操作后,喷雾结构易造成缺失,尤其在靠近喷嘴位置处油束径向宽度较窄的区域。因此根据实际情况在进行闭运算或孤立点剔除操作后,对油束靠近喷嘴区域进行喷雾结构重建,以保证计算得到的宏观参数尽量贴近实际值。
重构喷嘴下方喷雾
- 将离喷嘴最近的孤立点或连通域关于喷嘴所在轴线进行镜像处理,尽可能保留靠近喷嘴处喷雾的结构;
- 以喷嘴尖端坐标位置为上边界的中点,向下将3×3的区域像素值置“1”。
获取宏观结构
经过重构后的图像,使用
[
k
,
v
]
=
b
o
u
n
d
a
r
y
(
x
,
y
,
s
)
[k,v] = boundary(x,y,s)
[k,v]=boundary(x,y,s) 函数得到所有连通域的外包轮廓。k为轮廓坐标的索引值,v是边界所包围区域的面积值,s是收缩因子,较大的s可以得到更为紧凑的边界。
对获取的外包轮廓进行曲线的拟合或对边界上的散点进行线性插值即可求得的所需边界点的坐标。