【问题标题】:MATLAB: applying filter to ROI or mask in greyscale imageMATLAB:将过滤器应用于灰度图像中的 ROI 或掩码
【发布时间】:2016-04-02 14:51:10
【问题描述】:

我有一张灰度图像 (​​I),并且想在 matlab (R2015b) 中对该图像的不同区域应用不同的过滤器(随机和不规则形状的区域)。我有一个二值化版本,我希望将第一个过滤器应用于(附加)。我不确定制作蒙版的最佳方法...我可以加载此二进制图像并使用 bwconncomp 定位连接的组件并将它们定义为不适用于 poly2mask 的单个向量。对于 A. 如何从该二值图像中获取蒙版和 B. 如何使用此蒙版对灰度图像的该部分应用滤镜有什么建议?

提前致谢!

MASK=imread('/Users/bk/Desktop/FIJI_image/mask4.tif');
BACK=imcomplement(MASK);
I=imread('/Users/bk/Desktop/FIJI_image/Orig.tif');
I(~MASK)=0;
SE=ones(13,13);

A=stdfilt(I, SE);

minZ=min(min(A));
maxZ=max(max(A));
Low_High=[minZ maxZ];

var5=255/maxZ;
B=uint8(A*var5);

C=(imadjust(B,stretchlim(B),[]));
imtool(C);

【问题讨论】:

    标签: matlab filter binary mask roi


    【解决方案1】:

    二值图像一个掩码。

    给定一个灰度图像I 和一个二值图像M 具有相同的大小,你可以得到图像I 使用掩码过滤M 使用:

    J = I;
    J(~M) = 0;
    

    这只是掩饰。对于过滤,您可以使用 imfilter 或任何其他 MATLAB 过滤函数对 I 应用过滤器。例如:

    h = fspecial('motion', 50, 45);
    K = imfilter(I, h);
    

    现在你可以得到不在M中的像素的原始值了:

    K(~M) = I(~M);
    

    所以现在KM 为真的位置过滤了像素,在M 为假的位置过滤了未经处理的像素。

    您添加的示例代码:

    inputDir = 'temp2';
    I = imread(fullfile(inputDir, 'PJlUm.png'));
    M = imread(fullfile(inputDir, 'ewSPv.png'));
    M = logical(M); % Convert M to a logical matrix, i.e. a mask.
    
    Imasked = I;
    Imasked(~M) = 0;
    
    ImaskedAndStretched = Imasked;
    ImaskedAndStretched(M) = imadjust(ImaskedAndStretched(M),stretchlim(ImaskedAndStretched(M)),[]);
    
    IstretchedAtMask = I;
    IstretchedAtMask(M) = ImaskedAndStretched(M);
    
    figure;
    subplot(3,2,1);
    imshow(I);
    title('Input Image');
    subplot(3,2,2);
    imshow(M);
    title('Mask');
    subplot(3,2,3);
    imshow(Imasked);
    title('Image Masked');
    subplot(3,2,4);
    imshow(ImaskedAndStretched);
    title('Image Masked & Stretched');
    subplot(3,2,5);
    imshow(IstretchedAtMask);
    title('Image Stretched At Mask');
    

    输出:

    【讨论】:

    • 谢谢,这与我最初所做的类似..当我这样做时遇到的问题(我使用 stdfilt() 过滤器然后进行对比度拉伸)是我得到一个来自感兴趣区域与背景接壤的边缘周围的处理的奇怪输出,对比度拉伸也似乎偏斜。有没有办法让过滤器只在蒙版内卷积并忽略边缘,并且类似地将对比度拉伸限制在蒙版/感兴趣的区域?谢谢!
    • 蒙版的边框很“奇怪”,因为您在边框的一侧使用了过滤器,但在另一侧没有使用。您可以在边界附近的像素上使用imgaussfilt 模糊边界。您可以使用蒙版M 上的bwperimbwboundaries 找到边框像素。您可以使用imdilate“加宽”边框像素。
    • 关于对比度拉伸 - 您可以使用蒙版仅拉伸过滤后的像素。即I(M) = imadjust(I(M),stretchlim(I(M)),[]);。这是可能的,因为对比度拉伸操作不需要邻域信息,这意味着图像中像素的顺序和“形状”不会影响结果。
    • 我已经添加了我正在运行的代码以及运行过滤器/对比度拉伸后的输出。看起来 stdev 过滤器确实结合了在 0 背景和掩码内的图像之间寻找强标准偏差,而不是仅在掩码范围内进行过滤。
    • 能否添加输入图片?
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多