如何使用另一个二进制图像中定义的边界显示灰度图像

时间:2014-04-08 22:55:45

标签: image matlab image-processing medical

我有原始的灰度图像(我使用乳房X线照片图像,图像外有图像)。 我需要删除该图像中的一些对象(标签),因此我将该灰度图像转换为二进制图像。然后我按照提供的答案方法 How to Select Object with Largest area

最后,我提取了一个面积最大的对象作为二进制图像。我希望该区域为灰度级,以便访问和分割其中的小对象。例如。区域内的轻微组织也应检测其边缘。

Extracted Binary image Original Gray Scale Image

**

  

如何将分离的对象区域作为灰度图像或   无论如何直接从灰度获得最大的物体区域   没有转换为二进制或任何其他方式。?

**

(我是matlab的新手。我不知道我是否正确解释。如果你不能,我会提供更多细节)

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望使用二进制映射并访问这些区域中相应的像素强度。

如果是这样的话,那就很简单了。您可以使用二进制映射来标识要在原始图像中访问强度的位置的空间坐标。创建一个空白图像,然后使用这些空间坐标将这些强度复制到空白图像上。

以下是您可以使用的示例代码。

% Assumptions:
% im - Original image
% bmap - Binary image 

% Where the output image will be stored
outImg = uint8(zeros(size(im)));

% Find locations in the binary image that are white
locWhite = find(bmap == 1);

% Copy over the intensity values from these locations from
% the original image to the output image.
% The output image will only contain those pixels that were white
% in the binary image
outImg(locWhite) = im(locWhite);

% Show the original and the result side by side
figure;
subplot(1,2,1);
imshow(im); title('Original Image');
subplot(1,2,2);
imshow(outImg); title('Extracted Result');

如果您正在寻找,请告诉我。

方法#2

正如Rafael在评论中所建议的那样,您可以跳过使用find并使用逻辑语句:

outImg = img; 
outImg(~bmap) = 0;

我决定使用find,因为它对初学者来说不那么混淆,即使这样做效率较低。这两种方法都能给你正确的结果。


一些值得思考的食物

二进制图像中提取的区域有几个洞。我怀疑你想要抓住整个区域而没有任何漏洞。因此,我建议您在使用上述代码之前填写这些漏洞。 MATLAB的imfill函数运行良好,它接受二进制图像作为输入。

点击此处的文档:http://www.mathworks.com/help/images/ref/imfill.html

因此,首先在二进制图像上应用imfill,然后继续使用上面的代码进行提取。

答案 1 :(得分:1)

如果我理解正确的话,你会想要一张只有最大斑点突出显示的灰色图像。

<强>代码

img = imread(IMAGE_FILEPATH);
BW = im2bw(img,0.2); %%// 0.2 worked to get a good area for the biggest blob

%%// Biggest blob
[L, num] = bwlabel(BW);
counts = sum(bsxfun(@eq,L(:),1:num));
[~,ind] = max(counts);
BW = (L==ind);

%%// Close the biggest blob
[L,num] = bwlabel( ~BW );
counts = sum(bsxfun(@eq,L(:),1:num));
[~,ind] = max(counts);
BW = ~(L==ind);

%%// Original image with only the biggest blob highlighted
img1 = uint8(255.*bsxfun(@times,im2double(img),BW));

%%// Display input and output images
figure,
subplot(121),imshow(img)
subplot(122),imshow(img1)

<强>输出

enter image description here