コード例 #1
0
ファイル: test_anagrams.c プロジェクト: TeamJaguar/anagrams
void test_makeHistogram()

{

   int i;

   int histogram[26] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

                         0, 1, 0, 0, 0, 0, 0, 0};

   int *newHistogram;



   if ((((makeHistogram("Cat"))) != ((void *)0))) {} else {UnityFail( (" Expected Non-NULL"), (_U_UINT)(_U_UINT)(_U_UINT)19);;};



   newHistogram = makeHistogram("cat");



   for (i = 0; i < 26; i++) {

      UnityAssertEqualNumber((_U_SINT)((histogram[i])), (_U_SINT)((newHistogram[i])), (((void *)0)), (_U_UINT)24, UNITY_DISPLAY_STYLE_INT);

   }



}
コード例 #2
0
ファイル: test_anagrams.c プロジェクト: TeamJaguar/anagrams
void test_makeHistogram()
{
   int i;
   int histogram[26] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                         0, 1, 0, 0, 0, 0, 0, 0};
   int *newHistogram;

   TEST_ASSERT_NOT_NULL(makeHistogram("Cat"));

   newHistogram = makeHistogram("cat");

   for (i = 0; i < 26; i++) {
      TEST_ASSERT_EQUAL_INT(histogram[i], newHistogram[i]);
   }

}
コード例 #3
0
ファイル: wordfreq.c プロジェクト: nrubin/SoftwareSystems
int main(int argc, char **argv)
{
    gchar *file_contents = openFile("huckfinn.txt");
    gchar **split_file = split(file_contents);
    GHashTable *map = makeHistogram(split_file);
    GList *sorted = sortWords(map);
    printSortedMap(sorted,map);
    return 0;
}
void MainWindow::applyFilter(int i)
{
    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    if(actCV->cvImage.data == NULL) return;

    k2D.filter(actCV->cvImage, i);
    actCV->showImage(actCV->cvImage);
    makeHistogram();
}
void MainWindow::on_actionBlack_Hat_triggered()
{
    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    morpher->setElemNSize(morphUI->elementType, morphUI->kernelSize, morphUI->iteration);
    morpher->Morph( actCV->cvImage, 6);
    actCV->showImage(actCV->cvImage);
    actCV->setWindowTitle("dilate - ");
    actCV->buildHistogram();
    makeHistogram();
}
void MainWindow::addImage()
{
    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    double alpha = 0.75;
    double beta = ( 1.0 - alpha );
    addWeighted( actCV->cvImage, alpha, actCV->inputImage, beta, 0.0, actCV->cvImage);
    actCV->showImage(actCV->cvImage);
    actCV->setWindowTitle("Blended");
    actCV->buildHistogram();
    makeHistogram();
}
void MainWindow::on_actionEqualize_triggered()
{
    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    if(actCV->cvImage.channels() == 1){

        equalizeHist(actCV->cvImage, actCV->cvImage);
        actCV->showImage(actCV->cvImage);
        actCV->buildHistogram();
        makeHistogram();
    }
}
void MainWindow::on_actionMake_Border_triggered()
{
    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    cv::Mat paddedImage;
    int top = 20, bottom = 20, left = 20, right = 20;
    int borderType = BORDER_CONSTANT; //BORDER_REPLICATE BORDER_REFLECT101
    copyMakeBorder(actCV->cvImage, paddedImage, top, bottom, left, right, borderType, Scalar(0));
    actCV->showImage(paddedImage);
    actCV->setWindowTitle("Padded Image");
    actCV->buildHistogram();
    makeHistogram();
}
void MainWindow::on_actionBinary_triggered()
{

    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    if(actCV->cvImage.data == NULL) return;
    if(actCV->cvImage.channels() == 1) return;
    cv::Mat image;
    cv::cvtColor(actCV->inputImage, image, CV_BGR2HSV_FULL);
    actCV->showImage(image);
    actCV->buildHistogram();
    makeHistogram();
}
コード例 #10
0
void rgb_stretch(QImage &img, const QRect &rect)
{
  int rmin, rmax;
  int gmin, gmax;
  int bmin, bmax;
  makeHistogram(img, rect, getRed,   256, &rmin, &rmax);
  makeHistogram(img, rect, getGreen, 256, &gmin, &gmax);
  makeHistogram(img, rect, getBlue,  256, &bmin, &bmax);

  RGBV lo(rmin/255.0, gmin/255.0, bmin/255.0);
  RGBV stretch(rmax==rmin? 1.0 : 255.0/(rmax-rmin),
               gmax==gmin? 1.0 : 255.0/(gmax-gmin),
               bmax==bmin? 1.0 : 255.0/(bmax-bmin));
  for (int y=rect.top(); y<=rect.bottom(); y++)
    for (int x=rect.left(); x<=rect.right(); x++)
    {
      RGBV c(img.pixel(x, y));
      c.addk(lo, -1);
      c.mulv(stretch);
      c.clamp();
      img.setPixel(x, y, c.toQRgb());
    }
}
コード例 #11
0
void HistogramFilter::generateHistogram()
{
	if(!m_frame)
		return;
		
	QImage image = frameImage();
	QImage histo = makeHistogram(image);
	
	VideoFrame *frame = new VideoFrame(histo,m_frame->holdTime());
	
	if(m_includeOriginalImage)
		frame->setCaptureTime(m_frame->captureTime());
	
	enqueue(frame);
}
void MainWindow::on_actionOriginal_triggered()
{
    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    cv::Mat image;
    actCV->inputImage.copyTo(image);
    QString fname = actCV->windowTitle();
    CvGlWidget *originalWindow = new CvGlWidget(this);
    ui->mdiArea->addSubWindow(originalWindow);
    originalWindow->setWindowTitle("original - " +fname );
    image.copyTo(originalWindow->inputImage);
    originalWindow->showImage(image);
    originalWindow->buildHistogram();
    originalWindow->show();
    makeHistogram();
}
void MainWindow::on_actionGray_triggered()
{

    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    if(actCV->cvImage.data == NULL) return;
    // if(actCV->cvImage.channels() == 1) return;
    cv::Mat image;
    cv::cvtColor(actCV->inputImage, image, CV_BGR2GRAY);

    actCV->showImage(image);
    actCV->buildHistogram();
    makeHistogram();

    //cv::imshow("asdf", gray);
}
コード例 #14
0
void luma_stretch(QImage &img, const QRect &rect)
{
  int qmin, qmax;
  makeHistogram(img, rect, getLuma, 256, &qmin, &qmax);

  double ymin = qmin/255.0;
  double k = qmax==qmin? 1.0 : 255.0/(qmax-qmin);

  for (int y=rect.top(); y<=rect.bottom(); y++)
    for (int x=rect.left(); x<=rect.right(); x++)
    {
      RGBV c(img.pixel(x, y));
      double yval = getLuma(img.pixel(x, y)); // Current luminance
      double ytgt = (yval - ymin)*k; // Target luminance
      c.mul(ytgt/yval);
      c.clamp();
      img.setPixel(x, y, c.toQRgb());
    }
}
void MainWindow::on_actionOpen_triggered()
{
    cvWindow = new CvGlWidget(this);

    ui->mdiArea->addSubWindow(cvWindow);

    cv::Mat image;
    QString filename = QFileDialog::getOpenFileName(this,
                                                    tr("Open Image file"), "..//vrml", tr("JPG image (*.jpg);;Portable Network Graphics(*.png)"));
    image = cv::imread(filename.toStdString());
    if(!image.data) return;
    cvWindow->setWindowTitle(filename + " -original");
    image.copyTo(cvWindow->inputImage);

    cvWindow->showImage(image);
    cvWindow->buildHistogram();

    cvWindow->show();
    makeHistogram();
}
void MainWindow::on_actionLocal_threshold_triggered()
{

    if(!activeMdiChild()) return;
    CvGlWidget *actCV = activeMdiChild();
    cv::Mat paddedImage;
    int kSize = threshUI->kernelSize;
    int UIT = threshUI->localThresh;
    int top = kSize, bottom = kSize, left = kSize, right = kSize;
    int borderType = threshUI->borderType; //BORDER_REPLICATE BORDER_REFLECT101
    copyMakeBorder(actCV->cvImage, paddedImage, top, bottom, left, right, borderType, Scalar(0));
    int r = actCV->cvImage.rows;  int c = actCV->cvImage.cols;

    //    paddedImage.convertTo(paddedImage, CV_64FC1);
    //    actCV->cvImage.convertTo(actCV->cvImage, CV_64FC1);
    cv::Mat t_im = Mat::zeros(r, c, CV_8UC1);

    cv::Mat sum;
    integral(actCV->cvImage, sum, CV_64FC1);

    for(int i = 0; i < r; i++){
        for(int j = 0; j < c; j++){
            float sum = 0;
            //   int it = 0;
            //run the kernel now
            for(int u = -(kSize - 1)/2; u <= (kSize - 1)/2; u++)
                for(int v = -(kSize - 1)/2; v <=(kSize -1)/2; v++){
                    sum += (float)paddedImage.at<uchar>(i +kSize+ u,j +kSize+ v);
                }
            //threshold here; 7 is ok
            float t = (float)sum/(kSize*kSize) - 7;
            if((float)actCV->cvImage.at<uchar>(i, j) > t) t_im.at<uchar>(i, j) = 255;
            else t_im.at<uchar>(i, j) = 0;
        }
    }

    actCV->showImage(t_im);
    actCV->buildHistogram();
    makeHistogram();
}
void MainWindow::subwindowChanged(QMdiSubWindow *currentSubWindow)
{
    CvGlWidget *actCV = qobject_cast<CvGlWidget *>(currentSubWindow);
    makeHistogram();
}
コード例 #18
0
ファイル: dam.c プロジェクト: dego-96/AIP
float DAM(float *data, int length, int resolution)
{
    float max, min;
    unsigned int *quant = Quantization(data, length, resolution, &max, &min);
    unsigned int *hist = makeHistogram(quant, length, resolution);

    // Discriminant Analysis
    int t, i;
    float sep_max = 0.0f;
    float sep;
    unsigned int num[2];
    float avr[2];
    float var[2];
    int threshold = 1;
    for (t = 1; t < resolution - 1; t++) {
        // Init
        num[0] = 0;
        num[1] = 0;
        avr[0] = 0.0;
        avr[1] = 0.0;
        var[0] = 0.0;
        var[1] = 0.0;
        // Get Num and Average
        for (i = 0; i < resolution; i++) {
            if (i < t) {
                num[0] += hist[i];
                avr[0] += (float)(hist[i] * i);
            } else {
                num[1] += *(hist + i);
                avr[1] += (float)(*(hist + i) * i);
            }
        }
        if (num[0] != 0 && num[1] != 0) {
            avr[0] = avr[0] / num[0];
            avr[1] = avr[1] / num[1];
        } else {
            num[0] = 1;
            num[1] = 1;
            continue;
        }
        // Get Variance
        for (i = 0; i < resolution; i++) {
            if (i < t) {
                var[0] += ((float)i - avr[0]) * ((float)i - avr[0]) * (hist[i]) / num[0];
            } else {
                var[1] += ((float)i - avr[1]) * ((float)i - avr[1]) * (hist[i]) / num[1];
            }
        }
        // Calc Separation
        sep = (float)num[0] * num[1] * (avr[0] - avr[1]) * (avr[0] - avr[1])
                / ((num[0] + num[1]) * (num[0] * var[0] + num[1] * var[1]));
        if (sep > sep_max) {
            sep_max = sep;
            threshold = t;
        }
    }

    free(quant);
    free(hist);

    return (float)threshold / (float)resolution * (max - min) + min;
//    return 30.0f;
}