mirror of https://github.com/2martens/uni.git
[CCV] Finished exercise 6
Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
parent
449d9aee3e
commit
2932d433ff
|
@ -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})
|
|
@ -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();
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue