比较alpha修剪滤镜中的像素

时间:2016-10-14 13:48:01

标签: c++ opencv

我有以下问题。我在opencv库中编写了alpha-trimmed过滤器的代码。我认为它构造得很合理但我不知道如何在用像素排序窗口期间比较两个3通道像素。在我的代码中,它已完成,但比较两个,但矢量是不可能的。我假设我应该比较一个频道和第二个频道,依此类推。你有任何提示,或者你可以在我的代码中提出一些修改。这是我的代码。

int alphatrimmed(Mat img, int alpha)
{
Mat img9 = img.clone();
const int start = alpha;
const int end = 9 - alpha;
//going through whole image
for (int i = 1; i < img.rows - 1; i++)
    for (int j = 1; j < img.cols-1; j++)
{
        int k = 0;
        Vec3b element[9];
//selecting elements
        for (int m = i - 1; m < i + 2; m++)
        for (int n = j - 1; n < j + 2; n++)
            element[k++] = img.at<Vec3b>(m*img.cols + n);
            for (int i = 0; i < end; i++)
            {
                int min = i;
                for (int j = i + 1; j < 9; j++)
                if (element[j] < element[min])
                    min = j;
                Vec3b temp = element[i];
                element[i] = element[min];
                element[min] = temp;
            }
            const int result = (i - 1)*(img.cols - 2) + j - 1;
            img9.at<Vec3b>(result) = element[start];
            for (int j = start + 1; j < end; j++)
                img9.at<Vec3b>(result) += element[j];
            img9.at<Vec3b>(result) /= 9 - alpha;
}
    namedWindow("AlphaTrimmed Filter", WINDOW_AUTOSIZE);
    imshow("AlphaTrimmed Filter", img9);
    return 0;
}

感谢您花时间解决我的问题。

0 个答案:

没有答案