MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkUSImageSource.cpp
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#include "mitkUSImageSource.h"
14#include "mitkProperties.h"
15
17
19 : m_OpenCVToMitkFilter(mitk::OpenCVToMitkImageFilter::New()),
20 m_MitkToOpenCVFilter(nullptr),
21 m_ImageFilter(mitk::BasicCombinationOpenCVImageFilter::New()),
22 m_CurrentImageId(0)
23{
24}
25
29
30void mitk::USImageSource::PushFilter(AbstractOpenCVImageFilter::Pointer filter)
31{
32 m_ImageFilter->PushFilter(filter);
33}
34
35bool mitk::USImageSource::RemoveFilter(AbstractOpenCVImageFilter::Pointer filter)
36{
37 return m_ImageFilter->RemoveFilter(filter);
38}
39
40bool mitk::USImageSource::GetIsFilterInThePipeline(AbstractOpenCVImageFilter::Pointer filter)
41{
42 return m_ImageFilter->GetIsFilterOnTheList(filter);
43}
44
45std::vector<mitk::Image::Pointer> mitk::USImageSource::GetNextImage()
46{
47 std::vector<mitk::Image::Pointer> result;
48
49 // Apply OpenCV based filters beforehand
50 if (m_ImageFilter.IsNotNull() && !m_ImageFilter->GetIsEmpty())
51 {
52 std::vector<cv::Mat> imageVector;
53 GetNextRawImage(imageVector);
54 if(result.size() != imageVector.size())
55 result.resize(imageVector.size());
56
57 for (size_t i = 0; i < imageVector.size(); ++i)
58 {
59 if (!imageVector[i].empty())
60 {
61 m_ImageFilterMutex.lock();
62 m_ImageFilter->FilterImage(imageVector[i], m_CurrentImageId);
63 m_ImageFilterMutex.unlock();
64
65 // convert to MITK image
66 this->m_OpenCVToMitkFilter->SetOpenCVMat(imageVector[i]);
67 this->m_OpenCVToMitkFilter->Update();
68
69 // OpenCVToMitkImageFilter returns a standard mitk::image.
70 result[i] = this->m_OpenCVToMitkFilter->GetOutput();
71 }
72 }
73 }
74 else
75 {
76 this->GetNextRawImage(result);
77 }
78
79 for (size_t i = 0; i < result.size(); ++i)
80 {
81 if (result[i].IsNotNull())
82 {
83 result[i]->SetProperty(IMAGE_PROPERTY_IDENTIFIER, mitk::IntProperty::New(m_CurrentImageId));
84 }
85 else
86 {
87 result[i] = mitk::Image::New();
88 }
89 }
90 m_CurrentImageId++;
91
92 return result;
93}
94
95void mitk::USImageSource::GetNextRawImage(std::vector<cv::Mat>& imageVector)
96{
97 // create filter object if it does not exist yet
98 if (!m_MitkToOpenCVFilter)
99 {
100 m_MitkToOpenCVFilter = mitk::ImageToOpenCVImageFilter::New();
101 }
102
103 // get mitk image through virtual method of the subclass
104 std::vector<mitk::Image::Pointer> mitkImg;
105 this->GetNextRawImage(mitkImg);
106
107 for (unsigned int i = 0; i < mitkImg.size(); ++i)
108 {
109 if (mitkImg[i].IsNull() || !mitkImg[i]->IsInitialized())
110 {
111 imageVector[i] = cv::Mat();
112 }
113 else
114 {
115 // convert mitk::Image to an OpenCV image
116 m_MitkToOpenCVFilter->SetImage(mitkImg[i]);
117 imageVector[i] = m_MitkToOpenCVFilter->GetOpenCVMat();
118 }
119 }
120}
Filter for creating MITK RGB Images from an OpenCV image.
std::vector< mitk::Image::Pointer > GetNextImage()
Retrieves the next frame. This will typically be the next frame in a file or the last cached file in ...
bool RemoveFilter(AbstractOpenCVImageFilter::Pointer filter)
static const char * IMAGE_PROPERTY_IDENTIFIER
virtual void GetNextRawImage(std::vector< cv::Mat > &)
Set the given OpenCV image matrix to the next image received from the device or file.
bool GetIsFilterInThePipeline(AbstractOpenCVImageFilter::Pointer filter)
void PushFilter(AbstractOpenCVImageFilter::Pointer filter)
IGT Exceptions.