Функция плавного шага в Java OpenCV - PullRequest
0 голосов
/ 26 марта 2019

Есть ли эквивалентная функция 'smoothstep' в opencv (java)? Она обычно используется в opengl / glsl и доступна как стандартная встроенная функция во многих других стандартных библиотеках обработки изображений. Возможно, мы сможем реализоватьэто с использованием комбинации пороговых / зажимных функций.Каков наилучший или наиболее эффективный способ использования функции плавного перехода с объектами matc opencv?

Вот пример кода: -

float smoothstep(float edge0, float edge1, float x) {
        // Scale, bias and saturate x to 0..1 range
        x = clamp((x - edge0) / (edge1 - edge0), 0.0f, 1.0f);
        // Evaluate polynomial
        return x * x * (3 - 2 * x);
    }

    float clamp(float x, float lowerlimit, float upperlimit) {
        if (x < lowerlimit)
            x = lowerlimit;
        if (x > upperlimit)
            x = upperlimit;
        return x;
    }

Imgproc.GaussianBlur(mskmat, mskmat,new org.opencv.core.Size(3,3), 0);


    Utils.matToBitmap(mskmat,bitmap);
    save(bitmap,"mask");

    //Smoothing

    mskmat.convertTo(mskmat,CV_32F);

    for (int i=0; i<mskmat.rows(); i++)
    {
      for (int j=0; j<mskmat.cols(); j++)
      {
        double[] data = mskmat.get(i, j); //Stores element in an array

        for (int k = 0; k < 1; k++) //Runs for the available number of channels
        {
          data[k] = 255.0f * smoothstep(0.3f,0.5f, (float)data[k]/255.0f); //Pixel modification done here
        }
        Log.d("Value", Arrays.toString(data));
        mskmat.put(i, j, data); //Puts element back into matrix
      }
    }

    mskmat.convertTo(mskmat,CV_8U);

    Utils.matToBitmap(mskmat,bitmap);
    save(bitmap,"smoothmask");

Однако этот метод кажется слишком медленным, и выводне так хорошо, как стандартная функция плавного шага.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

AFAIK OpenCV не предлагает эквивалент встроенного в GLSL сглаживания.Сама функция smoothstep () не сложна для реализации (отметьте Smoothstep в Википедии ) и может быть выполнена в несколько строк кода.

Не уверен, каков ваш вариант использования, поэтому я предполагаю, что, поскольку вы упоминаете использование smoothstep () для матриц / изображений, вы хотите смешать два изображения.Если это так, просто возьмите выходные данные функции smoothstep () и выполните линейную комбинацию, используя smoothstep и 1-smoothstep.

0 голосов
/ 26 марта 2019

Нет эквивалента для функции smoothstep в OpenCV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...