MCPcopy Create free account
hub / github.com/PointCloudLibrary/pcl / matchTemplates

Method matchTemplates

recognition/src/linemod.cpp:116–360  ·  view source on GitHub ↗

/////////////////////////////////////////////////////////////////////////////////////////

Source from the content-addressed store, hash-verified

114
115//////////////////////////////////////////////////////////////////////////////////////////////
116void
117pcl::LINEMOD::matchTemplates (const std::vector<QuantizableModality*> & modalities, std::vector<LINEMODDetection> & detections) const
118{
119 // create energy maps
120 std::vector<EnergyMaps> modality_energy_maps;
121 const std::size_t nr_modalities = modalities.size();
122 for (std::size_t modality_index = 0; modality_index < nr_modalities; ++modality_index)
123 {
124 const QuantizedMap & quantized_map = modalities[modality_index]->getSpreadedQuantizedMap ();
125
126 const std::size_t width = quantized_map.getWidth ();
127 const std::size_t height = quantized_map.getHeight ();
128
129 const unsigned char * quantized_data = quantized_map.getData ();
130
131 const unsigned char nr_bins = 8;
132 EnergyMaps energy_maps;
133 energy_maps.initialize (width, height, nr_bins);
134 //std::vector< unsigned char* > energy_maps(nr_bins);
135 for (unsigned char bin_index = 0; bin_index < nr_bins; ++bin_index)
136 {
137 //energy_maps[bin_index] = new unsigned char[width*height];
138 //memset (energy_maps[bin_index], 0, width*height);
139
140 const auto base_bit = static_cast<unsigned char> (0x1);
141 auto val0 = static_cast<unsigned char> (base_bit << bin_index); // e.g. 00100000
142 auto val1 = static_cast<unsigned char> (val0 | (base_bit << (bin_index+1)&7) | (base_bit << (bin_index+7)&7)); // e.g. 01110000
143 auto val2 = static_cast<unsigned char> (val1 | (base_bit << (bin_index+2)&7) | (base_bit << (bin_index+6)&7)); // e.g. 11111000
144 auto val3 = static_cast<unsigned char> (val2 | (base_bit << (bin_index+3)&7) | (base_bit << (bin_index+5)&7)); // e.g. 11111101
145 for (std::size_t index = 0; index < width*height; ++index)
146 {
147 if ((val0 & quantized_data[index]) != 0)
148 ++energy_maps (bin_index, index);
149 if ((val1 & quantized_data[index]) != 0)
150 ++energy_maps (bin_index, index);
151 if ((val2 & quantized_data[index]) != 0)
152 ++energy_maps (bin_index, index);
153 if ((val3 & quantized_data[index]) != 0)
154 ++energy_maps (bin_index, index);
155 }
156 }
157
158 modality_energy_maps.push_back (energy_maps);
159 }
160
161 // create linearized maps
162 const std::size_t step_size = 8;
163 std::vector<std::vector<LinearizedMaps> > modality_linearized_maps;
164 for (std::size_t modality_index = 0; modality_index < nr_modalities; ++modality_index)
165 {
166 const std::size_t width = modality_energy_maps[modality_index].getWidth ();
167 const std::size_t height = modality_energy_maps[modality_index].getHeight ();
168
169 std::vector<LinearizedMaps> linearized_maps;
170 const std::size_t nr_bins = modality_energy_maps[modality_index].getNumOfBins ();
171 for (std::size_t bin_index = 0; bin_index < nr_bins; ++bin_index)
172 {
173 unsigned char * energy_map = modality_energy_maps[modality_index] (bin_index);

Callers 1

matchTemplatesFunction · 0.80

Calls 8

aligned_mallocFunction · 0.85
aligned_freeFunction · 0.85
sizeMethod · 0.45
getWidthMethod · 0.45
getHeightMethod · 0.45
getDataMethod · 0.45
initializeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected