1
我正在嘗試在openCV庫中製作一個alphatrimmed過濾器。我的代碼無法正常工作,並且所得圖像在過濾後看起來不像圖像。 過濾器應該按照以下方式工作。Alpha修剪過濾器故障
- 在我的例子中使用一些(陣列)像素時,它是9像素的'3x3'窗口。
- 以增加的方式排列它們。
- 切割我們的'陣列'雙方爲alpha-2。
- 計算剩餘像素的算術平均值並將它們插入適當的位置。
int alphatrimmed(Mat img, int alpha)
{
Mat img9 = img.clone();
const int start = alpha/2 ;
const int end = 9 - (alpha/2);
//going through whole image
for (int i = 1; i < img.rows - 1; i++)
{
for (int j = 1; j < img.cols - 1; j++)
{
uchar element[9];
Vec3b element3[9];
int k = 0;
int a = 0;
//selecting elements for window 3x3
for (int m = i -1; m < i + 2; m++)
{
for (int n = j - 1; n < j + 2; n++)
{
element3[a] = img.at<Vec3b>(m*img.cols + n);
a++;
for (int c = 0; c < img.channels(); c++)
{
element[k] += img.at<Vec3b>(m*img.cols + n)[c];
}
k++;
}
}
//comparing and sorting elements in window (uchar element [9])
for (int b = 0; b < end; b++)
{
int min = b;
for (int d = b + 1; d < 9; d++)
{
if (element[d] < element[min])
{
min = d;
const uchar temp = element[b];
element[b] = element[min];
element[min] = temp;
const Vec3b temporary = element3[b];
element3[b] = element3[min];
element3[min] = temporary;
}
}
}
// index in resultant image(after alpha-trimmed filter)
int result = (i - 1) * (img.cols - 2) + j - 1;
for (int l = start ; l < end; l++)
img9.at<Vec3b>(result) += element3[l];
img9.at<Vec3b>(result) /= (9 - alpha);
}
}
namedWindow("AlphaTrimmed Filter", WINDOW_AUTOSIZE);
imshow("AlphaTrimmed Filter", img9);
return 0;
}
留下的[標籤:OpenCV的]禿鷹。 –
所以你有'element [9]'和'element3',後者被硬編碼爲'Vec3b',然後當你知道它必須是3時使用'c
MSalters