如何用二元掩模提取感兴趣的区域

时间:2014-11-11 23:06:12

标签: matlab image-processing

我有原始的胸部X光图像(orig.jpg)。我用ITK-SNAP做了手动分割,产生了这个二元掩模图像(bmask.jpg):

enter image description here

要从背景中提取肺部区域,请运行以下MATLAB代码:

clear all;
clc;
IR=imread('orig.jpg');
im=imread('bmask.jpg');
ROI = IR;
ROI(im == 1) = 0;
ROI(im ~= 1) = 1;
SEG = IR.*ROI;
figure;
imshow(SEG);
imwrite(SEG,'SEG.jpg');

结果图片:

enter image description here

我发现,因为在肺部边界附近的肺部区域内的二元面罩的一些像素具有" 1"值,所得图像在肺部区域内的肺部边界附近有一些黑点。而且,在得到的图像中,肺边界具有Z字形图案,而不是作为二元掩模的平滑图案。我该如何解决这些问题?有人可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:5)

我猜你遇到的问题是因为你的jpg掩码不是真正的二进制图像。使用jpg来存储二进制图像并不是一个好主意,因为由于jpegs的压缩性质,你的掩码会略微偏离二进制图像,特别是在边缘。

要从你的jpeg面具中获取真正的二进制图像,你可以试试这个:

Ibw = im2bw(rgb2gray(imread('mask.jpg')));

如果没有帮助,当您生成面具时,请不要使用jpeg。相反,在灰度级中使用未压缩(或无损压缩)tiff,或者仅将其存储为文件中的二进制matlab矩阵。

希望这有帮助。

答案 1 :(得分:-1)

clear all;
clc;
IR=imread('orig.jpg');
im=imread('bmask.jpg'); %binary image
ROI = IR;
ROI(im == 0) = 0;
figure;
imshow(ROI);