Filter2D.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //
  2. // Created by wrede on 11.07.16.
  3. //
  4. #include <cmath>
  5. #include "Filter2D.h"
  6. #include "FileIO.h"
  7. namespace util
  8. {
  9. Filter2D::Filter2D()
  10. {
  11. multiplier_ = 1.0;
  12. mask_.push_back(1.0);
  13. dimension_ = 1;
  14. vicinity_ = 0;
  15. }
  16. Filter2D::Filter2D(double multiplier, std::vector<double> mask)
  17. {
  18. multiplier_ = multiplier;
  19. mask_ = mask;
  20. dimension_ = Dimension(static_cast<int>(mask_.size()));
  21. vicinity_ = Vicinity(static_cast<int>(mask_.size()));
  22. }
  23. Filter2D::Filter2D(std::string const & mask_string, char delimiter)
  24. {
  25. if (mask_string.empty())
  26. {
  27. multiplier_ = 1.0;
  28. mask_.push_back(1.0);
  29. dimension_ = 1;
  30. vicinity_ = 0;
  31. }
  32. else
  33. {
  34. std::vector<std::string> parts = FileIO::Split(mask_string, delimiter);
  35. multiplier_ = stof(parts[0]);
  36. for (int i = 1; i < parts.size(); ++i)
  37. {
  38. mask_.push_back(stod(parts[i]));
  39. }
  40. dimension_ = Dimension(static_cast<int>(mask_.size()));
  41. vicinity_ = Vicinity(static_cast<int>(mask_.size()));
  42. }
  43. }
  44. int Filter2D::Index(int x, int y) const
  45. {
  46. return y * dimension_ + x;
  47. }
  48. int Filter2D::Vicinity(int count) const
  49. {
  50. return static_cast<int>(std::sqrt(count) / 2);
  51. }
  52. int Filter2D::Dimension(int size) const
  53. {
  54. return static_cast<int>(std::sqrt(size));
  55. }
  56. double Filter2D::Get(int x, int y) const
  57. {
  58. return mask_[Index(x, y)];
  59. }
  60. double Filter2D::Get(int i) const
  61. {
  62. return mask_[i];
  63. }
  64. double Filter2D::GetMultiplier() const
  65. {
  66. return multiplier_;
  67. }
  68. int Filter2D::GetVicinity() const
  69. {
  70. return vicinity_;
  71. }
  72. int Filter2D::GetDimension() const
  73. {
  74. return dimension_;
  75. }
  76. void Filter2D::Normalize()
  77. {
  78. for (auto & value : mask_)
  79. value *= multiplier_;
  80. multiplier_ = 1.0;
  81. }
  82. }