我在MATLAB中有这个3D数组(V:垂直,H:水平,t:时间范围)
下图表示在根据t轴切割阵列后使用imagesc
函数获得的图像
黑色区域代表损坏区域,其他区域完好无损
每帧看起来相似但幅度不同
我试图只想象缺陷区域并摆脱完整的区域
我尝试使用'阈值'摆脱完整区域的方法如下
NewSet = zeros(450,450,200);
for kk = 1:200
frame = uwpi(:,:,kk);
STD = std(frame(:));
Mean = mean(frame(:));
for ii = 1:450
for jj =1:450
if frame(ii, jj) > 2*STD+Mean
NewSet(ii, jj, kk) = frame(ii, jj);
else
NewSet(ii, jj, kk) = NaN;
end
end
end
end
在这种情况下,是否有任何图像处理方法可以摆脱完整的区域?
提前致谢
答案 0 :(得分:0)
您基于均值和标准差进行阈值处理,基本上假设您的数据是正态分布并寻找异常值。但是你的模型应该尝试区分零(噪声)和更高值之间的值。您的数据不是正态分布的,平均值和标准偏差没有意义。
查找Otsu阈值(MATLAB IP工具箱有它)。它的模型与您的数据不完全匹配,但它可能会给出合理的结果。像大多数阈值估计算法一样,它使用图像的直方图来确定给定某个模型的最佳阈值。
理想情况下,您可以在直方图中对背景峰进行建模。你可以找到模式,在它周围装一个高斯,然后在2西格玛处切断。或者您可以使用“三角形方法”,它找到直方图中距离直方图上端和背景峰顶部之间的线最远的点。有点复杂的解释,但实现起来微不足道。我们在DIPimage(http://www.diplib.org)中实现了这一点,M文件代码是可见的,因此您可以看到它是如何工作的(查找函数threshold
)
另外,我建议摆脱x和y的循环。您可以键入frame(frame<threshold) = nan
,然后在一次操作中将整个帧复制回NewSet
。
答案 1 :(得分:-1)
我是否清楚地了解这个问题,投资回报率是黑暗的边界,它周围的一切?如果是这样的话,我建议使用某种区域生长技术(如分水岭或带有imregionalmin标记的活跃蛇)进行3D处理。即使边框有小孔,这些方法也应该提供分割结果。而不仅仅是通过逻辑索引将分段对象复制到新的3D数组。