发布网友 发布时间: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;
}