MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkGrabCutOpenCVImageFilter.h
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
13#ifndef mitkGrabCutOpenCVImageFilter_h
14#define mitkGrabCutOpenCVImageFilter_h
15
16// mitk headers
18#include "mitkVector.h"
19
20// itk headers
21#include "itkObjectFactory.h"
22#include <itkThreadSupport.h>
23
24// opencv headers
25#include <opencv2/core.hpp>
26
27#include <condition_variable>
28#include <mutex>
29#include <thread>
30
31namespace itk {
32template<unsigned int T> class Index;
33template<class T> class SmartPointer;
34class MultiThreader;
35class ConditionVariable;
36class FastMutexLock;
37}
38
39namespace mitk {
40class PointSet;
41
61class MITKOPENCVVIDEOSUPPORT_EXPORT GrabCutOpenCVImageFilter : public AbstractOpenCVImageFilter
62{
63public:
65 typedef std::vector<itk::Index<2> > ModelPointsList;
66
68
70
72
75
85 bool OnFilterImage( cv::Mat& image ) override;
86
91 void SetModelPoints(ModelPointsList foregroundPoints);
92
98 void SetModelPoints(ModelPointsList foregroundPoints, ModelPointsList backgroundPoints);
99
103 void SetModelPoints(cv::Mat foregroundMask);
104
110 void SetModelPoints(cv::Mat foregroundMask, cv::Mat backgroundMask);
111
124 void SetModelPointsDilationSize(int modelPointsDilationSize);
125
137 void SetUseOnlyRegionAroundModelPoints(unsigned int additionalBorder);
138
145 void SetUseFullImage();
146
153 cv::Rect GetRegionAroundModelPoints();
154
166 int GetResultImageId();
167
176 cv::Mat GetResultMask();
177
192 std::vector<ModelPointsList> GetResultContours();
193
211 ModelPointsList GetResultContourWithPixel(itk::Index<2> pixelIndex);
212
213protected:
218 cv::Mat GetMaskFromPointSets();
219
225 cv::Rect GetBoundingRectFromMask(cv::Mat mask);
226
233 cv::Mat RunSegmentation(cv::Mat input, cv::Mat mask);
234
238 ModelPointsList ConvertMaskToModelPointsList(cv::Mat mask);
239
241
243 unsigned int m_AdditionalWidth;
245
248
252
254
257
260
261private:
269 void SegmentationWorker();
270
271 std::thread m_Thread;
272
274 bool m_StopThread;
275
276 std::condition_variable m_WorkerBarrier;
277
279 std::mutex m_ImageMutex;
280
282 std::mutex m_ResultMutex;
283
285 std::mutex m_PointSetsMutex;
286};
287} // namespace mitk
288
289#endif
Interface for image filters on OpenCV images.
Makes the OpenCV GrabCut filter available as OpenCVImageFilter.
std::vector< itk::Index< 2 > > ModelPointsList
List holding image indices of the model points.
int m_ResultImageId
id of the image which segmentation result is currently present in m_ResultMask
int m_InputImageId
id of the image currently set as m_InputImage
mitkClassMacro(GrabCutOpenCVImageFilter, AbstractOpenCVImageFilter)
IGT Exceptions.