NonLinearHistogram.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of NVIDIA CORPORATION nor the names of its
  13. * contributors may be used to endorse or promote products derived
  14. * from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
  17. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  19. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  20. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  21. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  22. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  23. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  24. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  26. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. */
  28. /**
  29. * @file
  30. * <b>Libargus Extension: Non Linear Histogram</b>
  31. *
  32. * @b Description: This file defines the Non Linear Histogram extension, and provide
  33. * methods to interpret non linear data in case of compressed data
  34. */
  35. #ifndef _ARGUS_NON_LINEAR_HISTOGRAM_H
  36. #define _ARGUS_NON_LINEAR_HISTOGRAM_H
  37. namespace Argus
  38. {
  39. /**
  40. * This adds a method to interpret the compressed histogram data correctly
  41. * It introduces one new interface:
  42. * - Ext::INonLinearHistogram: returns a list of normalized bin indices that map bins from
  43. * getHistogram() to compressed pixel values.
  44. * @defgroup ArgusExtNonLinearHistogram Ext::NonLinearHistogram
  45. * @ingroup ArgusExtensions
  46. */
  47. DEFINE_UUID(ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850,e801,11e8,b568,08,00,20,0c,9a,66);
  48. namespace Ext
  49. {
  50. /**
  51. * @class INonLinearHistogram
  52. *
  53. * Interface used to query the metadata to correctly interpret the compressed histogram data.
  54. * Returns the normalized bin values to correctly interpret the compressed bayer histogram
  55. * data. This interface will only be exposed in case the histogram is compressed.
  56. *
  57. * This interface is available from:
  58. * - Histogram child objects returned by ICaptureMetadata::getBayerHistogram()
  59. *
  60. * @ingroup ArgusCaptureMetadata ArgusExtNonLinearHistogram
  61. */
  62. DEFINE_UUID(InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0,e801,11e8,b568,08,00,20,0c,9a,66);
  63. class INonLinearHistogram : public Interface
  64. {
  65. public:
  66. static const InterfaceID& id() { return IID_NON_LINEAR_HISTOGRAM; }
  67. /**
  68. * Returns the average bayer values of bins for bayer histogram data.
  69. *
  70. * @param[out] binValues Returns the normalized average bin values (float in [0,1]) for
  71. * bins provided by IBayerHistogram interface.
  72. * In case the histogram data provided by IBayerHistogram::getHistogram()
  73. * is non-linear, this method will return a vector having the same size as
  74. * histogram (i.e. IBayerHistogram::getBinCount()), and will contain
  75. * normalized bayer colour values to which the histogram bin of the same
  76. * index corresponds.
  77. *
  78. * For Example, in case of Non Linear Histogram
  79. *
  80. * IBayerHistogram->getHistogram(&histogram);
  81. * INonLinearHistogram->getBinValues(&values);
  82. *
  83. * for(int i = 0 ; i < histogram.size() ; i++)
  84. * {
  85. * cout<<" bin: " << i
  86. * <<" normalized bin Value: " << values[i]
  87. * <<" frequency: " << histogram[i];
  88. * }
  89. */
  90. virtual Status getHistogramBinValues(std::vector< BayerTuple<float> >* binValues) const = 0;
  91. protected:
  92. ~INonLinearHistogram() {}
  93. };
  94. } // namespace Ext
  95. } // namespace Argus
  96. #endif // _ARGUS_NON_LINEAR_HISTOGRAM_H