This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA2EVM5777:需要有关开发颜色差异算法的帮助

Guru**** 2589275 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/637979/tda2evm5777-need-help-for-develop-the-color-difference-algorithm

器件型号:TDA2EVM5777

 大家好、

我们使用 TDA2xx 板开发颜色差异算法。
我们已将数据格式设置为 system_DF_BGR24_888、输出间距乘以3。

为此、我们使用了 VXLIB API。 以下是我们为实现所需结果而采取的步骤列表:-
1) 1)为了使用单摄像头用例测试算法、我们使用"VXLIB_tableLookup _i8u_o8u" API 在传入视频帧上应用了 LUT。
2) 2)随后使用"VXLIB_absDiff _i8u_i8u_o8u" API 在原始视频帧和 LUT 应用帧之间取绝对差。
3) 3)之后、我们使用"VXLIB_channelExtract_1of3_i8u_o8u" API 将视频帧分为 B、G 和 R 分量。
4) 4)最后、我们使用"VXLIB_add_i8u_i8u_o8u" API 添加了提取的 B、G 和 R 组件。

为了获得两个图像帧之间的绝对差值、我们使用了 VXLIB_absDiff i8u_i8u_o8u API 并设置了以下参数:       

       src_addr.DIM_x =宽度* 3;
       SRC_addr.DIM_y =高度;
       SRC_addr.STRING_y =间距[0];
       src_addr.data_type = VXLIB_UINT8;

       dst_addr.dim_x =宽度* 3;
       dst_addr.dim_y =高度;
       dst_addr.stade_y = inPit[0];
       dst_addr.data_type = VXLIB_UINT8;

根据颜色差算法要求、提取每个通道、生成的图像是所有通道的加法。
为了提取通道、我们使用了 VXLIB_channelExtract_1of3_i8u_o8u API 并设置以下参数:    
      

       srcAddr.dim_x =宽度*3;
       srcAddr.dim_y =高度;
       srcAddr.STRANT_y =间距[0];
       srcAddr.data_type = VXLIB_UINT24;

       dstAddr.DIM_x =宽度* 3;
       dstAddr.dim_y =高度;
       dstAddr.stade_y = inPit[0];
       dstAddr.data_type = VXLIB_UINT8;

为了添加通道、我们使用了 VXLIB_add_i8u_i8u_o8u API 并设置以下参数、

      srcAddr.DIM_x =宽度* 3;
       srcAddr.dim_y =高度;
       srcAddr.STRANT_y =间距[0];
       srcAddr.data_type = VXLIB_UINT8;
      
    dstAddr.DIM_x =宽度* 3;
       dstAddr.dim_y =高度;
       dstAddr.STRANT_y = outPit[0];
       dstAddr.data_type = VXLIB_UINT8;

查询:我们在绝对差值后得到完整的图像帧、但在添加所有三个通道后、我们没有得到完整的输出图像。
1) 1)请告知我们是否为所使用的 API 正确设置了参数。
2) 2)此外、如果我们在开发颜色差异算法时执行了错误的步骤、请更正我们。

我已附上结果供您参考。

如果您需要我们方面的更多信息、请告知我们。

谢谢、

Parth Modi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Parth、

    我已将您的问题转交给 VXLIB 专家。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先、在 VXLIB 中、我们提供每个函数的"check_params()"版本。 这些用于检查参数之间的所有关系、并确认是否发现任何问题。 我建议在集成期间使用这些函数来确认或调试任何问题。

    此外、当我查看您的 VXLIB_channelExtract_1of3_i8u_o8u 设置时、我会看到 srcAddr.DIM_x 和 dstAddr.DIM_x 为"width * 3"。 我认为这些应该只是"宽度"。 此外,您是否正在调用 VXLIB_channelExtract_1of3_i8u_o8u 3次... 每个通道一次? 之后,您将需要调用两次 add 内核,每次使用宽度而不是宽度*3作为输入,因为通道提取现在已将宽度减小了3。 您可能还需要检查输入和输出间距是否正确。

    此外、我不知道 inpPitch 或 outpPitch 的值是多少、但这些值应该是字节、而不是像素(也许已经是这样、但只是想确认)。

    请告诉我这是否能解决您的问题。

    此致、
    Jesse
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Jesse、

    很抱歉耽误你的回答。 我们最近忙于一些工作。

    根据您的建议、我们通过调用它们对应的 checkParams 函数来检查所有 API、并发现它们的所有返回状态都是有效的。

    根据您的建议、我们为通道提取 API 和附加 API 设置"srcAddr.DIM_x = width"。 但在这之后、输出会严重失真。

    此外、我们每次为每个通道调用提取 API thrice。
    请注意、我们得到了保留"srcAddr.DIM_x =宽度* 3"的完整图像

    请建议我们通过其他方式获取整个屏幕上的图像。 如果您需要其他信息/文件、请告知我们。

    此致、
    Khilav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    原始消息说:
    "查询:我们在绝对差值后得到完整的图像帧、但在添加所有三个通道后、我们没有得到完整的输出图像。"

    您能更具体吗?
    1、绝对差后的图像宽度、高度和跨度是多少。
    2.您的意思是您没有获得完整的输出图像? 图片中的结果是您所指的结果吗、因为图片中的结果水平缩小了3倍、重复了3次? 如果是、那么我觉得宽度* 3是问题所在。 如果您移除了* 3、您是否还移除了显示屏的宽度* 3? 如果算法的输入为 RGB888 (每像素24位)、则当您进行通道提取时、输出宽度现在为8位。 然后将这些通道相加、仍然得到8位。 因此、输出显示不应是 RGB888、而应是每像素8位灰度。 您能否确认这是显示屏上出现"失真"的原因?

    也许您可以附加实际代码以进行审阅、并对变量值(如宽度)进行注释。 如果不看这一点,我方面就会有猜测。

    Jesse