This commit is contained in:
Thomas BONNIER 2024-12-13 09:54:40 +01:00
parent b1d50517c6
commit 3b7ba64aa9
1 changed files with 4 additions and 63 deletions

View File

@ -32,68 +32,15 @@ void saveTransformationMatrix(const std::string& filename, const cv::Mat& transf
fs.release();
}
cv::Mat upscaleImage(const cv::Mat& image, double scaleFactor)
{
cv::Mat upscaled;
cv::resize(image, upscaled, cv::Size(), scaleFactor, scaleFactor, cv::INTER_LINEAR);
return upscaled;
}
cv::Mat sharpenImage(const cv::Mat& image)
{
cv::Mat sharpened;
cv::Mat sharpeningKernel = (cv::Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
cv::filter2D(image, sharpened, -1, sharpeningKernel);
return sharpened;
}
cv::Mat reduceNoise(const cv::Mat& image)
{
cv::Mat denoised;
cv::GaussianBlur(image, denoised, cv::Size(5, 5), 0);
return denoised;
}
cv::Mat gammaCorrection(const cv::Mat& image, double gamma)
{
cv::Mat adjusted;
cv::Mat lookupTable(1, 256, CV_8U);
uchar* p = lookupTable.ptr();
for (int i = 0; i < 256; ++i)
{
p[i] = cv::saturate_cast<uchar>(pow(i / 255.0, gamma) * 255.0);
}
cv::LUT(image, lookupTable, adjusted);
return adjusted;
}
cv::Mat enhanceImage(const cv::Mat& image)
{
cv::Mat enhanced;
cv::Mat kernel = (cv::Mat_<float>(3, 3) << 1, 1, 1, 1, -7, 1, 1, 1, 1);
cv::filter2D(image, enhanced, CV_32F, kernel);
cv::normalize(enhanced, enhanced, 0, 255, cv::NORM_MINMAX, CV_8UC1);
cv::cvtColor(image, enhanced, cv::COLOR_BGR2GRAY);
cv::equalizeHist(enhanced, enhanced);
cv::GaussianBlur(enhanced, enhanced, cv::Size(5, 5), 0);
return enhanced;
}
cv::Mat equalizeHistogram(const cv::Mat& image)
{
cv::Mat equalized;
cv::cvtColor(image, equalized, cv::COLOR_BGR2GRAY);
cv::equalizeHist(equalized, equalized);
cv::cvtColor(equalized, equalized, cv::COLOR_GRAY2BGR);
return equalized;
}
cv::Mat adaptiveThresholding(const cv::Mat& image)
{
cv::Mat gray, thresholded;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
cv::adaptiveThreshold(gray, thresholded, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 11, 2);
cv::cvtColor(thresholded, thresholded, cv::COLOR_GRAY2BGR);
return thresholded;
}
std::map<int, cv::Point3f> fixedMarkerPositions;
void loadMarkerPositions(const std::string& filename)
@ -129,13 +76,7 @@ void loadMarkerPositions(const std::string& filename)
void processFrame(const cv::Mat& frame, std::map<int, cv::Point2f>& markerPositions, cv::Mat& transformationMatrix, bool& calibrationDone)
{
// Apply image processing steps
cv::Mat processedFrame = gammaCorrection(frame, 0.4);
processedFrame = sharpenImage(processedFrame);
processedFrame = upscaleImage(processedFrame, 3.0);
processedFrame = reduceNoise(processedFrame);
processedFrame = enhanceImage(processedFrame);
processedFrame = equalizeHistogram(processedFrame);
processedFrame = adaptiveThresholding(processedFrame);
cv::Mat processedFrame = enhanceImage(frame);
// Create ArUco marker detector
cv::Ptr<cv::aruco::Dictionary> dictionary =