【问题标题】:How to use a logical image as a mask for the original image?如何使用逻辑图像作为原始图像的掩码?
【发布时间】:2014-11-06 17:04:04
【问题描述】:

我有一个原始图像,并且仅在一些连接的组件上我想使用 SIFT 功能。我能够根据 matlab 帮助文件提取这些区域并将它们转换为逻辑格式:

本节介绍如何创建二进制掩码来定义 ROI。 但是,任何二进制图像都可以用作掩码,前提是 二值图像与被过滤的图像大小相同。

这是原图

这是我想要的部分,我能够以逻辑格式提取:

现在我只想对原始图像的这个单连通分量应用 SIFT 函数。

我使用了createMask 函数,格式与帮助文档中的说明相同:

img = imread(word.jpg);
h_im = imshow(img);
e = word_bw; %this is the image to be used as mask
BW = createMask(e,h_im);

我收到错误:Undefined function 'createMask' for input arguments of type 'logical'.

如何以一种允许我仅将函数应用于原始图像中的该区域的方式使用我的蒙版?

【问题讨论】:

  • 那个叫createMask的神奇功能在哪里?它必须在path 中作为.m 文件。
  • @Divakar 对不起?你问我是从哪里拿到代码的?好吧,它来自这个页面:mathworks.co.uk/help/images/…
  • BW = img.*word_bw 怎么样,假设img 是灰度或二进制图像,word_bw 是二进制数组?
  • createMask 专门用于获取两个句柄(一个是交互式 ROI 对象),并输出一个逻辑掩码。它对图像没有任何作用。 word_bw; 已经是一个逻辑掩码。
  • @nkjt 嗯,我明白了,所以这就是我不能使用它的原因。如果我已经是一个面具,你能建议我如何使用它来实现我想要的。谢谢

标签: image matlab image-processing mask image-segmentation


【解决方案1】:

看看这是否适合你 -

img_out = img;
img_out(~word_bw) = 0;

img_out 将是应用了来自word_bw 的蒙版的图像。

【讨论】:

  • 谢谢您,您的最新编辑使其更加清晰。 img_out = word_bw.*double(img) 创建了一个图像,即使 double 看起来是合乎逻辑的,所以我认为原始数据丢失了。因此,如果我想使用像 SIFT 这样的函数,我是否必须将它与 unit8 一起使用,比如 SIFT(unit8(img_out)) 还是 unit8 仅用于 imshow 并且即使是双格式,它也会产生相同的结果?谢谢
  • @FarazKhan 我对 SIFT 不太熟悉,但如果它涉及图像处理,它通常会期望uint8 格式输入,因此,尝试使用uint8(255*word_bw)。那将是更新后的代码中的img_out_uint8
  • @FarazKhan 抱歉,我不得不对代码进行重大更改。您能否检查解决方案中显示的图像是否是您想要的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 2020-04-13
  • 2022-06-13
相关资源
最近更新 更多