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

mar*_*gol 3 matlab image-processing

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

在此输入图像描述

要从背景中提取肺部区域,我运行以下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');
Run Code Online (Sandbox Code Playgroud)

结果图片:

在此输入图像描述

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

谢谢.

Mar*_*cin 5

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

要从jpeg掩码中获取真正的二进制图像,您可以尝试这样做:

Ibw = im2bw(rgb2gray(imread('mask.jpg')));
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.