2、实际应用中,也可以取9点,去掉最小两点和最大两点,取中间5点的平均值作为采样值。N取多少点,去掉最大最小几个数值,没有硬性的规定,自己可以在程序中根据实际情况自行决定。按照题目要求写如下代码,后面附结果,如果满意,望采纳!
#include <stdioh>
#include <stdlibh>
#include <stringh>
double A[3][16] = {160,163,167,80,83,85,155,158,159,20,22,23,170,173,176,179,
159,158,155,75,78,80,156,159,153,25,23,21,167,168,166,164,
153,155,157,81,84,82,154,153,158,27,25,24,168,172,171,170};
double mask[3][3] = {1,2,1,
2,4,2,
1,2,1};
void myfilter(double p)
{
int i,j;
for (i = 1; i <= 14; ++i)
{
/ code /
double sum = 0;
for(j=0;j<3;++j)
{
sum += A[j][i-1]mask[j][0] + A[j][i]mask[j][1] + A[j][i+1]mask[j][2];
}
// printf("sum=%lf\n", sum);
p++ = sum/16;
}
return;
}
int main(int argc, char const argv[])
{
/ code /
double ans[14];
double p = ans;
myfilter(p);
int i;
for(i=0;i<14;++i)
{
printf("%4lf\n", ans[i]);
}
printf("\n");
system("pause");
return 0;
}
方法一:
imfinfo('testpng')%查看文件信息
%可以看出是真彩色图像,ColorType: 'truecolor'
%转换为灰度图像进行处理
X=imread('testpng');
X=rgb2gray(X);
X=im2double(X);%uint8转换为double类型
%保留运算后的负值
%防止运算时精度丢失
g=medfilt2(X,[3 3],'symmetric');%中值滤波33,采用对称的填充方式
g1=im2uint8(g);%double[0,1]----->uint8[0,255]
%二值化处理
g1(find(g1<128))=0;
g1(find(g1>=128))=1;
subplot(3,1,1);
imshow(X,[]);title('原图');
subplot(3,1,2);
imshow(g,[]);title('33中值滤波');
subplot(3,1,3);
imshow(g1,[]);title('33中值滤波+二值化处理');
结果见1png
方法二:
imfinfo('testpng')%查看文件信息
%可以看出是真彩色图像,ColorType: 'truecolor'
%转换为灰度图像进行处理
X=imread('testpng');
X=rgb2gray(X);
X=im2double(X);%uint8转换为double类型
%保留运算后的负值
%防止运算时精度丢失
g=medfilt2(X,[3 3],'symmetric');%中值滤波33,采用对称的填充方式
g1=mat2gray(g);
g1=im2bw(g1,05);%二值化处理,im2bw:image to black-white的意思
subplot(3,1,1);
imshow(X);title('原图');
subplot(3,1,2);
imshow(g);title('33中值滤波');
subplot(3,1,3);
imshow(g1);title('33中值滤波+二值化处理');
结果与前面的相同。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)