【问题标题】:Generate the histogram of an object while ignoring the background在忽略背景的情况下生成对象的直方图
【发布时间】:2012-11-22 20:51:14
【问题描述】:

图像直方图的计算是一项简单的任务,大多数可用的语言或库都为此提供了函数。但是,如果我想从直方图的计算中排除图像背景(例如,假设有一个蒙版来裁剪图像中包含的对象),是否有函数允许您仅考虑图像的一部分来计算直方图由掩码定义?

更新。蒙版没有特定的形状,因为它是通过减去背景获得的:换句话说,蒙版的黑色像素标识背景,而白色像素标识背景对象。

【问题讨论】:

  • 没有特定形状是什么意思?它应该具有与图像相同的大小,背景像素中的值为 true。你能举个例子吗(阅读,给我们看代码)。
  • @carandraug 你的意思是它没有特定的形状?抱歉,我使用形容词“特别”可能有误:面具没有特定形状(不是方形蒙版,也不是矩形等);例如,如果我有一张包含一杯咖啡的图像,我将只计算杯子的直方图并排除背景像素。
  • 然后告诉我你是如何识别它的。因为您问题的答案取决于您如何识别自己的背景。
  • 该代码确实返回了一个与输入图像大小完全相同的逻辑矩阵。您可以将其用于logical indexing。执行image(mask) 将返回image 的像素值,其中mask 为真。也就是说,@Mr E 的回答是正确的。但是,由于您正在进行图像处理,因此不要使用hist,而是使用imhist。您将需要图像包(获取版本 2.0.0,它修复了一个大错误)。

标签: algorithm matlab image-processing opencv octave


【解决方案1】:

hist(im(mask))

或者取决于你的面具的定义方式

hist(im(~mask))

工作?

【讨论】:

  • 蒙版没有特定的形状,因为它是通过减去背景得到的:换句话说,蒙版的黑色像素标识背景,而白色像素标识对象。因此,im(mask) 命令将不起作用。
  • 如果蒙版在前两个维度上的形状与图像相同,它应该可以工作。你的面具没有那个属性吗?
  • 你是对的。我运行了命令im(mask),它返回一个向量:这个向量的长度等于图像的行数和列数的乘积。但是,我有一个彩色图像,所以我应该在每个通道创建一个包含maskm-by-n-by-3 矩阵吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2017-05-25
  • 2016-08-09
  • 2012-06-23
  • 2016-03-05
相关资源
最近更新 更多