diff --git a/IRImageProcessing/Source.cpp b/IRImageProcessing/Source.cpp index 9bc8f29..6fd4656 100644 --- a/IRImageProcessing/Source.cpp +++ b/IRImageProcessing/Source.cpp @@ -123,6 +123,16 @@ return invertedImage; } +cv::Mat maximumImage(const cv::Mat& img1, const cv::Mat& img2) { + + + cv::Mat maxImage = img1.clone(); // ���ʂ��i�[����Mat���쐬�iimg1�̃R�s�[���g�p�j + + cv::max(img1, img2, maxImage); + + return maxImage; +} + void BinaryProcessing(const cv::Mat& ori, const cv::Mat& src, std::string dirName) { // ��Â̓�l�� @@ -214,27 +224,33 @@ cv::Mat maxGaborImage; double maxGaborSum = -1.0; int maxAngle = -1; - cv::Mat src32F; - src.convertTo(src32F, CV_64F); - cv::Mat margeImage = cv::Mat::zeros(src.size(), CV_8U); + cv::Mat src64F; + src.convertTo(src64F, CV_64F); + cv::Mat margeImage = cv::Mat::zeros(src64F.size(), CV_64F); + cv::Mat marge8UImage; // Find the angle that gives the maximum sum of gaborImage8U - for (int i = 0; i < division; i++, angle += (180 / division)) { + for (int i = 0; i < division; i++, angle += (180 / division)) + { theta = angle * CV_PI / 180.0; // opencv��gabor filter cv::Mat kern = cv::getGaborKernel(cv::Size(ksize, ksize), sigma, theta, lambda, gamma, psi, CV_64F); kern /= cv::sum(kern)[0]; cv::Mat gaborImage, gabor8UImage, gaborBinaryImage; - cv::filter2D(src, gaborImage, CV_64F, kern); + cv::filter2D(src64F, gaborImage, CV_64F, kern); //�摜�̌^�ϊ��Ɛ��K�� double minVal, maxVal; cv::minMaxLoc(gaborImage, &minVal, &maxVal); // gaborImage�̍ŏ��l�ƍő�l���擾 + margeImage = maximumImage(gaborImage, margeImage); + + gaborImage.convertTo(gabor8UImage, CV_8U, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal)); + margeImage.convertTo(marge8UImage, CV_8U, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal)); //cv::threshold(gabor8UImage, gaborBinaryImage, 128 , 255, cv::THRESH_BINARY); - cv::adaptiveThreshold(gabor8UImage, gaborBinaryImage, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 101, 10); + //cv::adaptiveThreshold(gabor8UImage, gaborBinaryImage, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 101, 10); // �J�[�l���̒l��0����255�͈̔͂ɐ��K�� double kernMinVal, kernMaxVal; @@ -248,28 +264,30 @@ cv::Mat gaborImageScaled, diffImage; // �����摜 - cv::absdiff(src, gabor8UImage, diffImage); + //cv::absdiff(src, gabor8UImage, diffImage); cv::convertScaleAbs(diffImage, gaborImageScaled, 1.0 / division); std::string fileStr = std::to_string(i) + "_over_" + std::to_string(division) + "pi"; // �摜�̕ۑ� - cv::imwrite(dirName + "/Gabor_" + fileStr + ".png", gabor8UImage); - cv::imwrite(dirName + "/diff_" + fileStr + ".png", diffImage); - cv::imwrite(dirName + "/GaborOtsuBinaryImage_" + fileStr + ".png", gaborBinaryImage); + cv::imwrite(dirName + "/Gabor_" + fileStr + ".png", gaborImage); + cv::imwrite(dirName + "/Gabor8U_" + fileStr + ".png", gabor8UImage); + //cv::imwrite(dirName + "/diff_" + fileStr + ".png", diffImage); + //cv::imwrite(dirName + "/GaborOtsuBinaryImage_" + fileStr + ".png", gaborBinaryImage); // �J�[�l�����摜�t�@�C���Ƃ��ĕۑ� - cv::imwrite(dirName + "/Kernel_" + fileStr + ".png", kern8U); + cv::imwrite(dirName + "/Kernel_" + fileStr + ".png", kern); // �摜�̍��� - cv::add(margeImage, gaborImageScaled, margeImage, cv::noArray(), CV_8U); + //cv::add(margeImage, gaborImageScaled, margeImage, cv::noArray(), CV_8U); } cv::Mat margeOtsuBinaryImage; - cv::threshold(margeImage, margeOtsuBinaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU); + cv::threshold(marge8UImage, margeOtsuBinaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU); cv::imwrite(dirName + "/MargeOtsuBinaryImage.png", margeOtsuBinaryImage); cv::imwrite(dirName + "/Marge.png", margeImage); - BinaryProcessing(ori, margeImage, dirName); + cv::imwrite(dirName + "/Marge8U.png", marge8UImage); + //BinaryProcessing(ori, margeImage, dirName); }