|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.06.2012, 21:43 | #1 |
Регистрация: 05.06.2012
Сообщений: 4
|
обработка изображения преобразование Фурье
В C++ Builder нужно написать код выполняющий двумерное преобразование Фурье(т.е. работающий с изображением ). В идеале программа должна выглядеть как два окна в одно из которых грузиться начальное изображение а во второе выводиться изображение после преобразования (т.е. после нажатия кнопки Фурье)
Вопрос как написать код этого самого преобразования??? есть код написанный в OpenCV может кто нибудь подскажет как его переделать под C++ Builder?? void cvDFT( const CvArr* src, CvArr* dst, int flags, int nonzeroRows=0 ); Параметры: src Исходный массив (реальные или комплексные значения). dst Выходной массив такой же размерности. flags Флаги трансформации. CV_DXT_FORWARD – прямое преобразование Фурье. CV_DXT_INVERSE – обратное преобразование. CV_DXT_SCALE – масштабируемый результат: делится на число элементов массива. CV_DXT_ROWS – преобразование используется для каждого вектора отдельно. Применяется для обработки многократных векторов одновременно. CV_DXT_INVERSE_SCALE – CV_DXT_INVERSE вместе с CV_DXT_SCALE. nonzeroRows Количество рядов отличных от нуля в исходном множестве. Предназначено для ускорения преобразований. Если значение меньше 1, то игнорируется. #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; void help() { cout << "\nThis program demonstrated the use of the discrete Fourier transform (dft)\n" "The dft of an image is taken and it's power spectrum is displayed.\n" "Call:\n" "./dft [image_name -- default lena.jpg]\n" << endl; } Mat img; void DFT(); int main(int argc, char ** argv) { const char* filename = argc >=2 ? argv[1] : "lena.jpg"; img= imread(filename, CV_LOAD_IMAGE_GRAYSCALE); if( img.empty() ) { help(); return -1; } help(); DFT(); imwrite("out.jpg",img); waitKey(); return 0; } void DFT() { int M = getOptimalDFTSize( img.rows ); int N = getOptimalDFTSize( img.cols ); Mat padded; copyMakeBorder(img, padded, 0, M - img.rows, 0, N - img.cols, BORDER_CONSTANT, Scalar::all(0)); Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)}; Mat complexImg; merge(planes, 2, complexImg); dft(complexImg, complexImg); // compute log(1 + sqrt(Re(DFT(img))**2 + Im(DFT(img))**2)) split(complexImg, planes); magnitude(planes[0], planes[1], planes[0]); Mat mag = planes[0]; mag += Scalar::all(1); log(mag, mag); // crop the spectrum, if it has an odd number of rows or columns mag = mag(Rect(0, 0, mag.cols & -2, mag.rows & -2)); int cx = mag.cols/2; int cy = mag.rows/2; // rearrange the quadrants of Fourier image // so that the origin is at the image center Mat tmp; Mat q0(mag, Rect(0, 0, cx, cy)); Mat q1(mag, Rect(cx, 0, cx, cy)); Mat q2(mag, Rect(0, cy, cx, cy)); Mat q3(mag, Rect(cx, cy, cx, cy)); q0.copyTo(tmp); q3.copyTo(q0); tmp.copyTo(q3); q1.copyTo(tmp); q2.copyTo(q1); tmp.copyTo(q2); normalize(mag, mag, 0, 1, CV_MINMAX); imshow("spectrum magnitude", mag); normalize(mag, mag, 0, 255, CV_MINMAX); mag.copyTo(img); } Последний раз редактировалось Ria Alva; 06.06.2012 в 21:50. Причина: внесение кода написанного в OpenCV |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Builder обработка изображения преобразование Фурье | Ria Alva | Помощь студентам | 0 | 05.06.2012 20:31 |
обработка и преобразование изображения | midiss | C++ Builder | 0 | 04.06.2012 14:52 |
Дискретное преобразование фурье | Petrow | Помощь студентам | 5 | 17.11.2011 23:27 |
Двумерное преобразование Фурье | marina_sergina | Помощь студентам | 0 | 08.05.2011 20:23 |
Преобразование Фурье | fina | Помощь студентам | 0 | 17.06.2010 14:00 |