بررسی میزان دایروی بودن درب قوطی با تبدیل فوریه - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

بررسی میزان دایروی بودن درب قوطی با تبدیل فوریه

+1 امتیاز
سلام.

برای بررسی کردن میزان دایروی بودن اشکال چندین پست در این سایت دیدم آیا کسی اطلاع داره چطور با تبدیل فوریه(DFT) این کار را انجام بدم.

 

تشکر
سوال شده مهر 15, 1393  بوسیله ی اکبر نظری (امتیاز 31)   2 5 6

1 پاسخ

+2 امتیاز

در ابتدا بایستی نقاط مربط به کانتور درب قوطی را استخراج کنید  ابتدا پیش پردازش انجا داده و سپس با تابع findcontour  مجموعه نقاط مربوط به ناحیه درب قوطی را بدست بیارید و سپس با استفاده از مومنت مرتیه اول  مرکز ثقل این نقاط را محاسبه کنید. سپس شعاع هر نقطه نسبت به مرکز را محاسبه نمائید .شما می تونید کارتون را با هر resolution ی ضرایب فوریه را استخراج کنید من در اینجا از 17 ضریب استفاده کردم.

از رابطه زیر(تبدیل فوریه) ضرایب را محاسبه نمائید.هر چقدر شکل مورد نظر دایره ای باشد کاملاً ضرایب بکدیگر را خنثی و مجموع صفر می گردد.

تبدیل فوریه, کانتور,OpenCV,پردازش تصویر

از مجموع ضرایب میزان دایروی بودن را محاسبه نمائید.

تبدیل فوریه, کانتور,OpenCV,پردازش تصویر

vector<float> getRadiuses(const vector<cv::POint>& contour, const Point& center){
		vector<float> result;
		result.reserve(contour.size());
		for (auto& pnt : contour)
			result.push_back((float)norm(pnt - center));
		return result;

	}
	float getDFTCircularity(const vector<cv::POint>& contour, const cv::Point& center){
		const int N = contour.size();
		const int M = 17;

		vector<float> radiuses = getRadiuses(contour, center);
		vector<std::complex<double>> C(M, 0.f);
		double result = 0;
		for (int k = 1; k < M; k++){
			C[k] = std::complex<double>(0.,0.);
			std::complex<double> value(0.0, 0.0);
			for (int theta = 0; theta < N; theta++){
				
				value = std::complex<double>(0.0,  -(2 * CV_PI * k * theta / N));
				value = std::exp(value);
				value = std::complex<double>(radiuses[theta] * value.imag(), radiuses[theta] * value.real());
				C[k] += value;
			}
			result += std::norm(C[k]) ;
		}
		result = std::max(0., 100 - result / N);
		return (float)result;
	}

 

پاسخ داده شده آذر 9, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 12, 1393 بوسیله ی مصطفی ساتکی
...