ImgProcessAlg.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include "ImgProcessGlobal.h"
  3. #include "FeatureMatching.h"
  4. #if defined(_MSC_VER)
  5. #include <BaseTsd.h>
  6. typedef SSIZE_T ssize_t;
  7. #endif
  8. enum IBorderType {
  9. IBORDER_CLAMP = (1 << 0),
  10. IBORDER_MIRROR = (1 << 1),
  11. IBORDER_REPEAT = (1 << 2),
  12. IBORDER_CONSTANT = (1 << 3)
  13. };
  14. namespace IBorder
  15. {
  16. template<typename T>
  17. T value(T value, T len, IBorderType type)
  18. {
  19. switch (type) {
  20. case IBORDER_CLAMP: if (value < 0)
  21. return 0;
  22. if (value >= len)
  23. return len - 1;
  24. return value;
  25. case IBORDER_MIRROR:
  26. if (value < 0)
  27. return -((value + 1) % len);
  28. if (value >= len)
  29. return len - 1 - value % len;
  30. return value;
  31. case IBORDER_REPEAT:
  32. if (value < 0)
  33. return len - 1 + ((value + 1) % len);
  34. if (value >= len)
  35. return value % len;
  36. return value;
  37. case IBORDER_CONSTANT:
  38. default:
  39. if (value < 0 || value >= len) return -1;
  40. }
  41. return -1;
  42. }
  43. }
  44. static float g_gauss3_data[] = { 0.25f, 0.5f, 0.25f };
  45. static float g_gauss5_data[] = { 1.0f / 17.0f, 4.0f / 17.0f, 7.0f / 17.0f, 4.0f / 17.0f, 1.0f / 17.0f };
  46. static float g_gauss7_data[] = { 1.0f / 226.0f, 12.0f / 226.0f, 55.0f / 226.0f, 90.0f / 226.0f, 55.0f / 226.0f, 12.0f / 226.0f, 1.0f / 226.0f };
  47. static float g_derivate7_data[] = { -1.0f,-1.0f,-1.0f, 0.f, 1.0f,1.0f ,1.0f };
  48. static float g_derivate21_data[] = { -1.0f,-1.0f,-1.0f,-1.0f,-1.0f,-1.0f,-1.0f,-1.0f,-1.0f,-1.0f, 0.f, 1.0f,1.0f ,1.0f, 1.0f,1.0f ,1.0f, 1.0f,1.0f ,1.0f,1.0f };
  49. static float g_mean3_data[] = { 1.0f / 3.0f, 1.0f / 3.0f, 1.0f / 3.0f };
  50. static float g_mean5_data[] = { 1.0f / 5.0f, 1.0f / 5.0f, 1.0f / 5.0f, 1.0f / 5.0f, 1.0f / 5.0f };
  51. static float g_mean7_data[] = { 1.0f / 7.0f, 1.0f / 7.0f, 1.0f / 7.0f, 1.0f / 7.0f, 1.0f / 7.0f, 1.0f / 7.0f, 1.0f / 7.0f };
  52. static float g_mean11_data[] = { 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f, 1.0f / 11.0f };
  53. void CVX_PROCESS_EXPORT mulValue1f(float* dst, float const* src, const float value, const size_t n);
  54. void CVX_PROCESS_EXPORT convolveHorizontal1f(float* dst, const float* src, const size_t width, float const* weights, const size_t wn, IBorderType btype);
  55. float CVX_PROCESS_EXPORT ncc(const float* src1, const float* src2, const size_t n);
  56. cv::Mat CVX_PROCESS_EXPORT plotSignals1D(std::vector<float> projArray, int plotImageHeight = -1);
  57. //¼ÆËãͼÏñµÄÇåÎú¶È
  58. float CVX_PROCESS_EXPORT calImgSharpness(cv::Mat Pic, cv::Rect roi);
  59. int CVX_PROCESS_EXPORT calRoiInfo(const cv::Mat& m, int& idxL, int& idxR, int& idyT, int& idyB, float rectExpandWidthFactor = 0.05, int sampleStep = 40, int gradientThresh = 50);