2015-12-28 153 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