c语言中值滤波问题?

发布网友 发布时间:2022-04-23 17:48

我来回答

2个回答

热心网友 时间:2022-06-06 10:33

展开1全部1. 是规定做中值滤波的点不含边缘的点(取决于中值滤波窗口大小)。 2,对图像边缘部分的信息进行镜像处理。

热心网友 时间:2022-06-06 10:33

#include <stdio.h>
#include<stdlib.h>

void median(int* data, int n, int m);
int find(int* data, int n);
int main()
{
int i, n, m, a[100];
printf("决定输入数组的个数:");
scanf_s("%d", &n);
printf("决定模板大小:");
scanf_s("%d", &m);
printf("输入数组:");
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);

for (i = 0; i < n; i++)
printf_s("%d ", a[i]);
printf_s("\n");
median(a, n, m);

for (i = 0; i < n; i++)
printf_s("%d ", a[i]);
printf_s("\n");
printf("中值滤波后出现次数最多的数据是%d\n", find(a, n));

}
void median(int* data, int n, int m)
{

int i, j, k, temp, b[1000],c[1000];
int j_tmp;
for (i = 0; i < n ; i++)
{
k = 0;
for (j = i - m / 2; j <= i + m / 2; j++)
{
if (j < 0)
{
j_tmp = 0;
}
else
{
j_tmp = j;
}
b[k] = *(data + j_tmp);
k++;
}
for (k = 0; k < m; k++)
for (j = 0; j < m - 1 - k; j++)
{
if (b[j] > b[j + 1])
{
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}

c[i] = b[m / 2];

}

for (i = 0; i < n; i++)
{
*(data + i) = c[i];
}

}
int find(int* data, int n)
{
int i, j, k = 0, max = 0, b[1000];
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (*(data + j) == *(data + i))
k++;
}
b[i] = k;
}
for (i = 1; i < n; i++)
{
if (b[i] > b[i - 1])
max = b[i];
}
return max;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com