MATLAB:将过滤器应用于灰度图像中的 ROI 或掩码
MATLAB: applying filter to ROI or mask in greyscale image
我有一张灰度图像 (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);
二进制图像是掩码。
给定一张灰度图像 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);
所以现在 K
过滤了 M
为真的位置的像素,以及 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');
输出:
我有一张灰度图像 (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);
二进制图像是掩码。
给定一张灰度图像 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);
所以现在 K
过滤了 M
为真的位置的像素,以及 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');
输出: