2015-12-28 115 views
0

我有一个灰度图像(I),并希望将不同的滤波器应用于matlab(R2015b)中的不同区域(随机和不规则形状区域)。我有我想要的第一个过滤器应用于(附件)的二进制版本。我不确定制作蒙版的最佳方法......我可以加载这个二进制图像并使用bwconncomp来定位连接的组件,并将它们定义为单个向量,这些向量不适用于poly2mask。对于A.如何从这个二进制图像中获得一个蒙版的任何建议,以及B.如何使用这个蒙版将过滤器应用于灰度图像的该部分?MATLAB:将滤波器应用于ROI或灰度图像中的蒙板

在此先感谢!

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); 

enter image description here

enter image description here

enter image description here

回答

1

二进制图像的掩模。

给定一个灰度图像I并与同样大小二进制图像M,你可以得到图像I使用面膜M过滤:

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

这只是掩盖。为了进行过滤,您可以在I上使用或MATLAB的其他滤波器功能。例如:

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'); 

输出: Output for example

+0

谢谢,这是类似于我在做什么initially..the问题,我是说我这样做(I” m使用stdfilt()过滤器,然后做对比拉伸)是,我从感兴趣区域边缘背景边缘的处理中得到一个奇怪的输出,并且对比度拉伸看起来也是倾斜的。有没有办法让过滤器只在面罩内卷曲并忽略边缘,并且类似地将对比度拉伸限于面罩/感兴趣区域?谢谢! – user3470496

+0

面具的边框是“奇怪的”,因为您在边框的一侧使用过滤器,但不使用过滤器的另一侧。您可以在边框附近的像素上使用“imgaussfilt”模糊边框。您可以在掩码“M”上使用'bwperim'或'bwboundaries'来查找边界像素。你可以使用'imdilate'来“扩大”边界像素。 – Shaked

+0

关于对比度拉伸 - 您可以使用蒙版仅拉伸已过滤的像素。即I(M)= imadjust(I(M),stretchlim(I(M)),[]);'。这是可能的,因为对比度拉伸操作不需要邻域信息,这意味着图像中像素的顺序和“形状”不会影响结果。 – Shaked