1. ホーム
  2. OpenCV

OpenCV-DFT の最適サイズ cv::getOptimalDFTSize

2022-02-09 09:35:49

著者 スティーブン・ザイ ティエンバオ
著作権について 著作権は著者に帰属します。商業的な複製は著者に、非商業的な複製は出典を明記してください。

機能プロトタイプ

int getOptimalDFTSize(int vecsize);

パラメータの説明

  1. int 型の vecsize で、ベクターサイズ、通常は画像の幅または高さです。

テストコード

#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;

cv::Mat image_make_border(cv::Mat &src);

int main(void)
{
	Mat test = imread("liu.jpg", 0);
	cv::Mat result = image_make_border(test);

	imshow("original", test);
	imshow("result", result/255);
	waitKey(0);
	system("pause");
	return 0;
}

// Image boundary processing
cv::Mat image_make_border(cv::Mat &src)
{
	cout << "src row:" << src.rows << endl;
	cout << "src col:" << src.cols << endl;
	int w = cv::getOptimalDFTSize(src.cols); // Get the optimal width of the DFT transform
	int h = cv::getOptimalDFTSize(src.rows); // Get the optimal height of the DFT transformation
	cout << "w:" << w << endl;
	cout << "h:" << h << endl;
	cv::Mat padded;
	// Constant method to expand image boundaries, constant = 0
	cv::copyMakeBorder(src, padded, 0, h - src.rows, 0, w - src.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));
	padded.convertTo(padded, CV_32FC1);

	return padded;
}


テスト結果

図1 オリジナル画像
<図
図2 拡大画像
<図
図3 立体視の変化

       この関数は、離散フーリエ変換に最適な画像のサイズを自動的に計算し、計算速度を向上させます。図に見られるように、幅は非常に適切ですが、高さは4096に拡張する必要があり、その結果、下の黒い線の部分が余分にできます。拡張した値は、後述のcopyMakeBorder関数で決定します〜。

       もしこの記事が役に立ったなら、いいね!で教えてくれたら嬉しいです~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!乾杯