在此输入图像描述

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

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

在此输入图像描述在此输入图像描述

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

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

我试图仅可视化缺陷区域并消除完整区域

我尝试使用“阈值”方法来消除完整区域,如下所示

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

然而,由于每一帧都有不同的幅度,结果变成在此输入图像描述在此输入图像描述

Is there any image processing method to get rid of intact area in this case?

Thanks in advance


您根据平均值和标准差进行阈值设置,基本上假设您的数据呈正态分布并寻找异常值。但是您的模型应该尝试区分零附近的值(噪声)与更高的值。您的数据不是正态分布的,平均值和标准差没有意义。

查找 Otsu 阈值(MATLAB IP 工具箱有)。它的模型并不完全匹配您的数据,但它可能会给出合理的结果。与大多数阈值估计算法一样,它使用图像的直方图来确定给定模型的最佳阈值。

理想情况下,您可以在直方图中对背景峰值进行建模。您可以找到众数,在其周围拟合高斯分布,然后在 2 西格玛处截止。或者您可以使用“三角形法”,它沿着直方图找到距离直方图上端和背景峰顶部之间的线最远的点。解释起来有点复杂,但实施起来却很简单。我们在 DIPimage ( http://www.diplib.org )中实现了此功能,M 文件代码是可见的,因此您可以看到它是如何工作的(查找函数threshold

此外,我建议消除 x 和 y 上的循环。您可以键入frame(frame<threshold) = nan,然后NewSet通过一次操作将整个帧复制回其中。


我是否清楚地理解了这个问题:投资回报率是黑色边框及其周围的所有内容?如果是这样,我建议使用某种区域生长技术(例如分水岭或带有 imregionalmin 标记的活动蛇)进行 3D 处理。即使边界有小孔,该方法也应该提供分割结果。不仅仅是通过逻辑索引将分段对象复制到新的 3D 数组。


I'd like to have a go at this, any way you could include the dataset?

If you could tell me your email address, I can send it to you right away I guess

drive.google.com/file/d/0B9HB9TLYb3HMb3RaNFQtakw2clU/… Here is my dataset: uwpi.mat(450x450x200) Give it a try and let me know! Good luck

You can try to normalize your images first or look at greythresh

是的。黑色边框和它周围的一切都是投资回报率。我也试试你的方法。谢谢