00001 #include "preprocess.h"
00002
00003 Preprocess::Preprocess(Ui::mainFrameClass pui) {
00004 ui=pui;
00005 }
00006
00007 Preprocess::~Preprocess() {}
00008
00012 IplImage* Preprocess::applyNoise(IplImage* src,int smoothType){
00013 IplImage *dst_image=cvCloneImage(src);
00014 QString qNoiseType=(smoothType==CV_BLUR)?"Blur":(smoothType==CV_GAUSSIAN)?"Gaussian":(smoothType==CV_MEDIAN)?"Median":"";
00015 if (ui.comboLog->currentIndex()>0)
00016 ui.txInform->append(QString("Applying Noise filter: %1").arg(qNoiseType));
00017 int iKernel=ui.comboKernelNoise->currentText().toInt();
00018 int iSigma=ui.leSigmaNoise->text().toInt();
00019 cvSmooth(src, dst_image,smoothType,iKernel,iKernel,iSigma);
00020 cvReleaseImage(&src);
00021 return dst_image;
00022 }
00023
00027 IplImage* Preprocess::applySobelx(IplImage* src){
00028 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00029 IplImage *df_dx = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1);
00030 if (ui.comboLog->currentIndex()>0)
00031 ui.txInform->append(QString("Applying Sobel X filter"));
00032
00033 cvSobel( src, df_dx, 1, 0, 3);
00034 cvConvertScaleAbs( df_dx , dst_image, 1, 0);
00035 cvReleaseImage(&df_dx);
00036 cvReleaseImage(&src);
00037 return dst_image;
00038 }
00042 IplImage* Preprocess::applySobely(IplImage* src){
00043 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00044 IplImage *df_dy = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1);
00045 if (ui.comboLog->currentIndex()>0)
00046 ui.txInform->append(QString("Applying Sobel Y filter"));
00047
00048
00049 cvSobel( src, df_dy, 0, 1, 3);
00050
00051 cvConvertScaleAbs( df_dy , dst_image, 1, 0);
00052
00053 cvReleaseImage(&df_dy);
00054 cvReleaseImage(&src);
00055 return dst_image;
00056 }
00060 IplImage* Preprocess::applySobel(IplImage* src){
00061 IplImage *dst_imagex = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00062 IplImage *dst_imagey = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00063 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00064 IplImage *df_dx = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1);
00065 IplImage *df_dy = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1);
00066 if (ui.comboLog->currentIndex()>0)
00067 ui.txInform->append(QString("Applying Sobel Min(sobelx/sobely) filter"));
00068
00069 cvSobel( src, df_dx, 1, 0, 3);
00070 cvSobel( src, df_dy, 0, 1, 3);
00071 cvConvertScaleAbs( df_dx , dst_imagex, 1, 0);
00072 cvConvertScaleAbs( df_dy , dst_imagey, 1, 0);
00073 cvReleaseImage(&df_dx);
00074 cvReleaseImage(&df_dy);
00075 cvReleaseImage(&src);
00076 cvMin(dst_imagex,dst_imagey,dst_image);
00077 cvReleaseImage(&dst_imagex);
00078 cvReleaseImage(&dst_imagey);
00079 return dst_image;
00080 }
00081
00085 IplImage* Preprocess::applyLaplace(IplImage* src){
00086 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00087 IplImage *dst_temp = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1);
00088 if (ui.comboLog->currentIndex()>0)
00089 ui.txInform->append(QString("Applying Laplace filter"));
00090 cvLaplace(src, dst_temp);
00091 cvConvertScaleAbs( dst_temp , dst_image, 1, 0);
00092 cvReleaseImage(&dst_temp);
00093 cvReleaseImage(&src);
00094 return dst_image;
00095 }
00096
00100 IplImage* Preprocess::applyMatrix(IplImage* src,float filterData[9]){
00101 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00102 CvMat* pKernel = cvCreateMat(3,3,CV_32FC1);
00103 if (ui.comboLog->currentIndex()>0)
00104 ui.txInform->append(QString("Applying Matrix binary filter: %1,%2,%3,%4,%5,%6,%7,%8,%9")
00105 .arg(filterData[0]).arg(filterData[1]).arg(filterData[2])
00106 .arg(filterData[3]).arg(filterData[4]).arg(filterData[5])
00107 .arg(filterData[6]).arg(filterData[7]).arg(filterData[8]));
00108
00109 cvmSet (pKernel, 0, 0, filterData[0]); cvmSet (pKernel, 0, 1, filterData[1]); cvmSet (pKernel, 0, 2, filterData[2]);
00110 cvmSet (pKernel, 1, 0, filterData[3]); cvmSet (pKernel, 1, 1, filterData[4]); cvmSet (pKernel, 1, 2, filterData[5]);
00111 cvmSet (pKernel, 2, 0, filterData[6]); cvmSet (pKernel, 2, 1, filterData[7]); cvmSet (pKernel, 2, 2, filterData[8]);
00112
00113
00114 cvFilter2D(src,dst_image,pKernel);
00115 cvReleaseMat(&pKernel) ;
00116
00117 cvReleaseImage(&src);
00118
00119 return dst_image;
00120 }
00121
00125 IplImage* Preprocess::applyMatrixLoG(IplImage* src){
00126 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00127
00128 CvMat* pKernel = cvCreateMat(5,5,CV_32FC1);
00129
00130 if (ui.comboLog->currentIndex()>0)
00131 ui.txInform->append(QString("Applying Matrix LoG filter"));
00132
00133 cvmSet (pKernel, 0, 0, 0); cvmSet (pKernel, 0, 1, 0); cvmSet (pKernel, 0, 2, 1); cvmSet (pKernel, 0, 3, 0); cvmSet (pKernel, 0, 4, 0);
00134 cvmSet (pKernel, 1, 0, 0); cvmSet (pKernel, 1, 1, 1); cvmSet (pKernel, 1, 2, 2); cvmSet (pKernel, 1, 3, 1); cvmSet (pKernel, 1, 4, 0);
00135 cvmSet (pKernel, 2, 0, 1); cvmSet (pKernel, 2, 1, 2); cvmSet (pKernel, 2, 2, -16); cvmSet (pKernel, 2, 3, 2); cvmSet (pKernel, 2, 4, 1);
00136 cvmSet (pKernel, 3, 0, 0); cvmSet (pKernel, 3, 1, 1); cvmSet (pKernel, 3, 2, 2); cvmSet (pKernel, 3, 3, 1); cvmSet (pKernel, 3, 4, 0);
00137 cvmSet (pKernel, 4, 0, 0); cvmSet (pKernel, 4, 1, 0); cvmSet (pKernel, 4, 2, 1); cvmSet (pKernel, 4, 3, 0); cvmSet (pKernel, 4, 4, 0);
00138
00139
00140
00141
00142
00143
00144
00145
00146 cvFilter2D(src,dst_image,pKernel);
00147 cvReleaseMat(&pKernel) ;
00148
00149 cvReleaseImage(&src);
00150
00151 return dst_image;
00152 }
00153
00154
00158 IplImage* Preprocess::applyThreshold(IplImage* src){
00159 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00160 int iThreshold=(ui.leThreshold->text()).toInt();
00161 if (ui.comboLog->currentIndex()>0)
00162 ui.txInform->append(QString("Applying Threshold binary filter: %1").arg(iThreshold));
00163 cvThreshold(src, dst_image,(double)iThreshold,(double)255,CV_THRESH_BINARY);
00164 cvReleaseImage(&src);
00165 return dst_image;
00166 }
00167
00171 IplImage* Preprocess::applyCanny(IplImage* src){
00172 IplImage *dst_image = cvCreateImage(cvSize(cvGetImageROI(src).width,cvGetImageROI(src).height), IPL_DEPTH_8U, 1);
00173 int iThres1=(ui.leThreshold1->text()).toFloat();
00174 int iThres2=(ui.leThreshold2->text()).toFloat();
00175 if (ui.comboLog->currentIndex()>0)
00176 ui.txInform->append(QString("Applying Canny filter between threshol1=%1, threshold=%2").arg(iThres1).arg(iThres2));
00177 cvCanny( src, dst_image,iThres1,iThres2);
00178
00179 cvReleaseImage(&src);
00180 return dst_image;
00181 }