【问题标题】:Performing threshold operation on an RGB image对 RGB 图像执行阈值操作
【发布时间】:2017-12-15 20:45:47
【问题描述】:

我需要对 RGB 图像执行阈值操作。我打算做的阈值应该如下所示。

如果一个像素的灰度等效(计算为0.299 * R' + 0.587 * G' + 0.114 * B')是Y,那么输出图像的像素值为:

P = Threshold_color, if Y < threshold_value
  = (R,G,B), Original value

,其中 Threshold_color 是一个 RGB 颜色值,

我想使用英特尔 IPP 库执行此操作。在那里我发现很少有与thresholding of images 相关的API。 (ippiThreshold_LTVal_8u_C3R)

但这些方法似乎一次只能处理一个数据点。但是我想要做的阈值取决于 3 个不同值(R、G、B)的组合。 有没有办法通过 IPP 库来实现这一点?

【问题讨论】:

    标签: c++ image image-processing intel-ipp


    【解决方案1】:

    建议的方法:

    1. 将图像复制为灰度图像
    2. 使用阈值创建二进制掩码 0/1(与灰度图像大小相同)
    3. 将此蒙版与要生成叠加层的替换颜色相乘
    4. 将叠加层应用于原始图像。

    请注意,您在这里生成不同类型的图像:首先是灰度图像,然后是黑白图像,最后是彩色图像(尽管在第 3 步中它是单色图像)

    【讨论】:

    • 感谢您提出一种方法。我能够使用以下 IPP api 获得所需的结果。 [颜色到灰度转换:ippiColorToGray_] [在灰度图像上应用阈值以获得单色图像:ippiLUTPalette_] [合并阈值和源图像:ippiAlphaComp_。]为了获得正确的合并,我也使用 ippiSet_ 为阈值图像和源图像设置正确的 alpha。我找不到可以从灰度图像生成位掩码的 API。所以我只使用了普通的 8 位深度图像。
    【解决方案2】:

    是的,您可以使用 IPP 实现此功能,但我不知道有任何标准功能可以满足您的需求。

    我可以在参考文献中找到的所有 IPP 阈值操作都使用全局阈值。

    【讨论】:

    • 我对在编程中使用 IPP 不熟悉。你能建议一个通过 IPP 实现结果的伪代码吗?只要步骤就足够了。我只需要知道 IPP 中有哪些与我的要求相关的功能。
    • @sajas 计算每个像素的灰度值,然后将其与您的阈值进行比较,并相应地分配输出像素。您可以通过多种方式执行此操作,使用 LUT 或算术运算或循环中的简单 if 语句。
    • 谢谢。成功后我会尝试并接受答案。
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2021-02-10
    • 2012-07-21
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多