MATLAB图像处理技术

时间:2017-08-19 06:07:35

标签: image matlab

enter image description here

我在MATLAB中有这个3D数组(V:垂直,H:水平,t:时间范围)

下图表示在根据t轴切割阵列后使用imagesc函数获得的图像

enter image description here enter image description here

黑色区域代表损坏区域,其他区域完好无损

每帧看起来相似但幅度不同

我试图只想象缺陷区域并摆脱完整的区域

我尝试使用'阈值'摆脱完整区域的方法如下

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

但是,由于每个帧的幅度不同,因此结果变为enter image description here enter image description here

在这种情况下,是否有任何图像处理方法可以摆脱完整的区域?

提前致谢

2 个答案:

答案 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数组。