1.固液气三相在剖面中的面积计算
其实很简单,只要在上一篇文章的代码基础上做一定的增添
%计算不同灰度所占像素
solid = 0;
liquid = 0;
gas = 0;
invalid = 0;
for i = 1:1193
for j=1:1528
if (140<= I_gray(i,j))& ( I_gray(i,j)<= 200)%经过试错发现阈值区间不能太小,要更大点
solid = solid+1;
%I_gray(i,j) = 0;%将固体区域变为纯黑,检测图像识别是否正确
else if (90<= I_gray(i,j))& ( I_gray(i,j)<= 130)
liquid = liquid+1;
%I_gray(i,j) = 0;%将液体区域变为纯黑,检测图像识别是否正确
else if (75<= I_gray(i,j))& ( I_gray(i,j)<= 89)
gas = gas+1;
else
I_gray(i,j) = 255;
invalid = invalid+1;
end
end
end
end
end
solid%输出固相的像素数
liquid%输出液相的像素数
gas%输出气相的像素数
validsum = solid+liquid+gas;
validsum
invalid
%计算识别到的和未识别到的比率rate,作为判断本次识别是否有效的标准
rate = validsum/(1193*1528);%分母是总像素数,可以查看图片尺寸得到
rate
根据图像的比例尺(这个要结合实际样品的尺寸得到),就可以通过像素数换算成实际的尺寸,进一步可以用来计算含水率等参数
2.剥离固相、气相,只保留液相
我的研究需要用到液相的变化,因此需要剥离原图像中的固相和气相,大家可以根据自己的需要修改代码
subplot(111);
imshow(I);
for i = 1:1193
for j=1:1528
if (140<= I_gray(i,j))& ( I_gray(i,j)<= 200)
I_gray(i,j) = 255;%将固体区域变为纯白
else if (90<= I_gray(i,j))& ( I_gray(i,j)<= 130)
I_gray(i,j) =0;%将液体区域变为纯黑
else if (75<= I_gray(i,j))& ( I_gray(i,j)<= 89)
I_gray(i,j) = 255;%将气体区域变为纯白
else
I_gray(i,j) = 0;%将未知区域变为纯黑
end
end
end
end
end
subplot(111)
imshow(I_gray);
figure,imshow(I_gray);
title('只保留液相的图像')
处理后的图像对比
这是原图
这是只保留液体后的
但这还不是我们想要的,处理后的图像有太多干扰点和水膜,我需要的只是液桥的形态
3.图像优化
为了优化掉干扰点和水膜,我们可以根据它们尺寸很小的特点,创建循环,判断像素上下左右一定范围内是否有其它黑色像素,是则认为该像素属于液桥,否则认为该像素属于干扰点或是水膜
%删除水膜和干扰点,横向优化
subplot(111);
imshow(I);
for times = 4:-1:1%这既是总循环的次数,也是每次优化时判定范围缩小的值
for i = (1):(1193)%防止超出索引边界
for j=(1+times):(1528-times)
if I_gray(i,j-times) == 255 && I_gray(i,j+times) == 255
I_gray(i,j) = 255;%将无效区域变为纯白
end
end
end
end
subplot(111)
imshow(I_gray);
figure,imshow(I_gray);
title('一次优化后的图像')
%删除水膜和干扰点,纵向优化
subplot(111);
for times = 4:-1:1%这既是总循环的次数,也是每次优化时判定范围缩小的值
for i = (1+times):(1193-times)%防止超出索引边界
for j=(1):(1528)
if I_gray(i-times,j) == 255 && I_gray(i+times,j) == 255
I_gray(i,j) = 255;%将无效区域变为纯白
end
end
end
end
subplot(111)
imshow(I_gray);
figure,imshow(I_gray);
title('二次优化后的图像')
优化结果
这回看起来有模有样了,但是成功了吗,我不好说,干扰点删除得七七八八了,但是部分比较厚的水膜还是被保留了下来。噪点删除过多会导致系统误删掉液桥的边角,删除过少则会保留过多的水膜。
该怎么解决?且待下回分解