tabletop_color_difference_likelihood.h
Go to the documentation of this file.
1 // -*- mode: c++ -*-
2 /*********************************************************************
3  * Software License Agreement (BSD License)
4  *
5  * Copyright (c) 2015, JSK Lab
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/o2r other materials provided
17  * with the distribution.
18  * * Neither the name of the JSK Lab nor the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *********************************************************************/
35 
36 
37 #ifndef JSK_PERCEPTION_TABLETOP_COLOR_DIFFERENCE_LIKELIHOOD_H_
38 #define JSK_PERCEPTION_TABLETOP_COLOR_DIFFERENCE_LIKELIHOOD_H_
39 
41 #include <sensor_msgs/Image.h>
42 #include <sensor_msgs/CameraInfo.h>
43 #include <jsk_recognition_msgs/PolygonArray.h>
46 #include <tf/message_filter.h>
49 #include <jsk_perception/TabletopColorDifferenceLikelihoodConfig.h>
50 #include <dynamic_reconfigure/server.h>
51 #include <jsk_recognition_msgs/HistogramWithRangeBin.h>
52 namespace jsk_perception
53 {
55  {
56  public:
57  typedef TabletopColorDifferenceLikelihoodConfig Config;
58  TabletopColorDifferenceLikelihood(): DiagnosticNodelet("TabletopColorDifferenceLikelihood") {}
59  protected:
60  virtual void onInit();
61  virtual void subscribe();
62  virtual void unsubscribe();
63  virtual void infoCallback(const sensor_msgs::CameraInfo::ConstPtr& msg);
64  virtual void imageCallback(const sensor_msgs::Image::ConstPtr& msg);
65  virtual void polygonCallback(const jsk_recognition_msgs::PolygonArray::ConstPtr& msg);
66  virtual void configCallback(Config& config, uint32_t level);
67 
69  cv::Mat& image,
71  size_t pi) const;
72 
78  inline virtual unsigned char computePixelDistance(const unsigned char from, const unsigned char to) const
79  {
80  if (cyclic_value_) {
81  unsigned char diff = (unsigned char)std::abs((int)from - (int)to);
82  unsigned char reverse_diff = pixel_max_value_ - diff;
83  return (unsigned char)std::min(diff, reverse_diff);
84  }
85  else {
86  return (unsigned char)std::abs((int)from - (int)to);
87  }
88  }
89 
93  inline virtual unsigned char computePixelHistogramDistance(const unsigned char from,
94  const std::vector<jsk_recognition_msgs::HistogramWithRangeBin>& bins)
95  {
96  unsigned char diff = 255;
97  for (size_t i = 0; i < bins.size(); i++) {
98  jsk_recognition_msgs::HistogramWithRangeBin bin = bins[i];
99  if (bin.min_value < from && bin.max_value > from) {
100  return 0;
101  }
102  else {
103  unsigned char min_direction_distance = computePixelDistance(from, (unsigned char)bin.min_value);
104  unsigned char max_direction_distance = computePixelDistance(from, (unsigned char)bin.max_value);
105  diff = std::min(std::min(min_direction_distance, max_direction_distance),
106  diff);
107  }
108  }
109  return diff;
110  }
111 
112  boost::mutex mutex_;
114  sensor_msgs::CameraInfo::ConstPtr latest_info_msg_;
115  jsk_recognition_msgs::PolygonArray::ConstPtr latest_polygon_msg_;
130  private:
131  };
132 }
133 
134 #endif
msg
virtual void polygonCallback(const jsk_recognition_msgs::PolygonArray::ConstPtr &msg)
virtual void infoCallback(const sensor_msgs::CameraInfo::ConstPtr &msg)
virtual void imageCallback(const sensor_msgs::Image::ConstPtr &msg)
boost::shared_ptr< tf::MessageFilter< sensor_msgs::Image > > tf_filter_
IMETHOD Vector diff(const Vector &p_w_a, const Vector &p_w_b, double dt=1)
config
message_filters::Subscriber< sensor_msgs::Image > sub_image_
DiagnosticNodelet(const std::string &name)
virtual unsigned char computePixelHistogramDistance(const unsigned char from, const std::vector< jsk_recognition_msgs::HistogramWithRangeBin > &bins)
virtual unsigned char computePixelDistance(const unsigned char from, const unsigned char to) const
compute a distance between pixels. if cyclic_value_ is true, it take into account two direction...
virtual void debugPolygonImage(const jsk_recognition_utils::CameraDepthSensor &model, cv::Mat &image, jsk_recognition_utils::Polygon::Ptr polygon, size_t pi) const
boost::shared_ptr< dynamic_reconfigure::Server< Config > > srv_
jsk_recognition_msgs::PolygonArray::ConstPtr latest_polygon_msg_


jsk_perception
Author(s): Manabu Saito, Ryohei Ueda
autogenerated on Mon May 3 2021 03:03:27