[CCV] Finished exercise 6

Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
Jim Martens 2017-05-16 15:42:29 +02:00
parent 449d9aee3e
commit 2932d433ff
4 changed files with 123 additions and 0 deletions

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5)
project(sheet6)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
add_executable(sheet6 fusion.cpp main.cpp)
target_link_libraries(sheet6 ${OpenCV_LIBS})

40
ccv/sheet6/fusion.cpp Normal file
View File

@ -0,0 +1,40 @@
#include <opencv2/opencv.hpp>
#include "fusion.h"
/**
* Returns the mean fusion of two feature maps.
*
* @param f_on_off feature map on off
* @param f_off_on feature map off on
* @return conspicuity map
*/
cv::Mat mean_fusion(cv::Mat f_on_off, cv::Mat f_off_on) {
cv::Mat C_l = 0.5 * (f_on_off + f_off_on);
double max_on_off;
double max_off_on;
cv::minMaxLoc(f_on_off, nullptr, &max_on_off);
cv::minMaxLoc(f_off_on, nullptr, &max_off_on);
double max = max_on_off >= max_off_on ? max_on_off : max_off_on;
cv::normalize(C_l, C_l, 0, max, cv::NORM_MINMAX, -1);
return C_l.clone();
}
/**
* Returns the max fusion of two feature maps.
*
* @param f_on_off feature map on off
* @param f_off_on feature map off on
* @return constpicuity map
*/
cv::Mat max_fusion(cv::Mat f_on_off, cv::Mat f_off_on) {
cv::Mat C_l = cv::max(f_on_off, f_off_on);
double max_on_off;
double max_off_on;
cv::minMaxLoc(f_on_off, nullptr, &max_on_off);
cv::minMaxLoc(f_off_on, nullptr, &max_off_on);
double max = max_on_off >= max_off_on ? max_on_off : max_off_on;
cv::normalize(C_l, C_l, 0, max, cv::NORM_MINMAX, -1);
return C_l.clone();
}

7
ccv/sheet6/fusion.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef SHEET6_FUSION_H
#define SHEET6_FUSION_H
cv::Mat mean_fusion(cv::Mat f_on_off, cv::Mat f_off_on);
cv::Mat max_fusion(cv::Mat f_on_off, cv::Mat f_off_on);
#endif //SHEET6_FUSION_H

67
ccv/sheet6/main.cpp Normal file
View File

@ -0,0 +1,67 @@
#include <opencv2/opencv.hpp>
#include "fusion.h"
int main(int argc, char **argv) {
std::vector<cv::Mat> on_off(10);
std::vector<cv::Mat> off_on(10);
for (int i = 0; i < 10; ++i) {
std::stringstream ss;
ss << i;
std::string i_as_str = ss.str();
std::string off_on_filename = "../contrasts/off_on_L_" + i_as_str + ".png";
off_on[i] = cv::imread(off_on_filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE);
off_on[i].convertTo(off_on[i], CV_32F);
std::string on_off_filename = "../contrasts/on_off_L_" + i_as_str + ".png";
on_off[i] = cv::imread(on_off_filename.c_str(), CV_LOAD_IMAGE_GRAYSCALE);
on_off[i].convertTo(on_off[i], CV_32F);
/*cv::namedWindow(off_on_filename.c_str(), CV_WINDOW_NORMAL);
cv::imshow(off_on_filename.c_str(), off_on[i]);
cv::namedWindow(on_off_filename.c_str(), CV_WINDOW_NORMAL);
cv::imshow(on_off_filename.c_str(), on_off[i]);
cv::waitKey(0);
cv::destroyWindow(off_on_filename.c_str());
cv::destroyWindow(on_off_filename.c_str());*/
}
cv::Mat feature_map_on_off = (cv::Mat &&) on_off.at(0);
cv::Mat feature_map_off_on = (cv::Mat &&) off_on.at(0);
cv::Size original_size_on_off = feature_map_on_off.size();
cv::Size original_size_off_on = feature_map_off_on.size();
for (unsigned long i = 1; i < 10; i++) {
cv::Mat resized_image;
cv::resize(on_off.at(i), resized_image, original_size_on_off, 0, 0, cv::INTER_CUBIC);
feature_map_on_off += resized_image;
cv::resize(off_on.at(i), resized_image, original_size_off_on, 0, 0, cv::INTER_CUBIC);
feature_map_off_on += resized_image;
}
cv::Mat f_on_off_norm;
cv::normalize(feature_map_on_off, f_on_off_norm, 0, 1, cv::NORM_MINMAX, -1);
cv::namedWindow("F on off", CV_WINDOW_NORMAL);
cv::imshow("F on off", f_on_off_norm);
cv::Mat f_off_on_norm;
cv::normalize(feature_map_off_on, f_off_on_norm, 0, 1, cv::NORM_MINMAX, -1);
cv::namedWindow("F off on", CV_WINDOW_NORMAL);
cv::imshow("F off on", f_off_on_norm);
cv::waitKey(0);
cv::destroyAllWindows();
cv::Mat C_l_mean = mean_fusion(feature_map_on_off, feature_map_off_on);
cv::Mat C_l_mean_norm;
cv::normalize(C_l_mean, C_l_mean_norm, 0, 1, cv::NORM_MINMAX, -1);
cv::namedWindow("C_l_mean", CV_WINDOW_NORMAL);
cv::imshow("C_l_mean", C_l_mean_norm);
cv::Mat C_l_max = max_fusion(feature_map_on_off, feature_map_off_on);
cv::Mat C_l_max_norm;
cv::normalize(C_l_max, C_l_max_norm, 0, 1, cv::NORM_MINMAX, -1);
cv::namedWindow("C_l_max", CV_WINDOW_NORMAL);
cv::imshow("C_l_max", C_l_max_norm);
cv::waitKey(0);
return 0;
}