引言:转眼之间,研一就结束了。这学期的模式识别课也接近了尾声。我本科是机械专业,编程和算法的理解能力比较薄弱。
所以虽然这学期老师上课上的很精彩,但是这学期的模式识别课上的感觉还是有点吃力。不过这学期也加强了编程的练习。这次的作业花了很久的时间,因为平时自己的方向是主要是图像降噪,自己在看这一块图像降噪**的时候感觉和模式识别的方向结合的比较少。
我看了这方面的模式识别和图像降噪结合的**,发现也比较少。在思考的过程中,我想到了聚类的方法。包括k均值和c均值等等。
因为之前学过k均值,于是就选择了k均值的聚类方法。然后用到了均值滤波和自适应滤波进行处理。
k-means 聚类算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数。
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。均值滤波是常用的非线性滤波方法 ,也是图像处理技术中最常用的预处理技术。
它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘。
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。
均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
自适应滤波器具有在未知环境下良好运行并跟踪时变输入统计量的能力,使得自适应滤波器成为信号处理和自动控制应用的强有力手段。在解决线性滤波问题的统计方法中,通常假设已知有用信号及其附加噪声的某些统计参数(例如,均值和自相关函数),而且需要设计含噪数据作为其输入的线性滤波器,使得根据某种统计准则噪声对滤波器的影响最小。实现该滤波器优化问题的一个有用方法是使误差信号(定义为期望响应与滤波器实际输出之差)的均方值最小化。
对于平稳输入,通常采用所谓维纳滤波器(wiener filter)的解决方案。该滤波器在均方误差意义上是最优的。误差信号均方值相对于滤波器可调参数的曲线通常称为误差性能曲面。
该曲面的极小点即为维纳解。滤波算法的运行涉及两个基本过程:(1)滤波过程,用来对一系列的输入数据产生输出响应;(2)自适应过程,其目的是提供滤波过程中可调参数自适应控制的一种机制(算法)。
这两个过程相互影响地工作。滤波过程结构的选择总体上对算法的运行具有深刻的影响。
我的想法是针对一副噪声**,可以首先进行k均值聚类,然后再进行去噪。然后我依据这个思路进行了编程。首先我将图像lena**加上了椒盐噪声,然后对噪声**进行了k均值的聚类。
聚类后的图像先进行了加法算法叠加求平均来去噪。然后进行了算术均值滤波和自适应滤波。最后对得到的图像进行灰度增强,得到最终的结果图。
在视觉效果上,的确去除了噪声,同时运算速度比较快, 基本在5秒左右,但同时也丢失了一些原本的组织结构。我将最后的结果图和噪声图做了一次差值,发现的确噪声随着一部分图像原来固有的结构被去除了。接下来可以思考可以怎样在去除噪声的同时尽可能多的保留**的原始结构。
以下是运行过程的结果显示。
先用kmeans进行聚类,再进行降噪。
close all;
clc;clear;
tic;rgb= imread ('h:\'读入图像。
img1=rgb2gray(rgb);
figure(1);
imshow(img1);
img2=imnoise(img1,'salt & pepper',0.05);%加椒盐噪声图像。
m,n]=size(img2);
figure(2);
subplot(1,2,1),imshow(img2);title('原图像');
hold off;
img=double(img2);
for i=1:500
g1(1)=0;
g2(1)=128;
g3(1)=255;%选择三个初始聚类中心,高灰度,中灰度,低灰度。
r=abs(img-g1(i));
g=abs(img-g2(i));
b=abs(img-g3(i));计算各像素灰度与聚类中心的距离。
r_g=r-g;
g_b=g-b;
r_b=r-b;
n_r=find(r_g<=0&r_b<=0);%寻找最小的聚类中心。
n_g=find(r_g>0&g_b<=0);%寻找中间的一个聚类中心。
n_b=find(g_b>0&r_b>0);%寻找最大的聚类中心。
i=i+1;
g1(i)=sum(img(n_r))/length(n_r);
g2(i)=sum(img(n_g))/length(n_g);
g3(i)=sum(img(n_b))/length(n_b);
dist1(i)=abs(g1(i)-g1(i-1));
dist2(i)=abs(g2(i)-g2(i-1));
dist3(i)=abs(g3(i)-g3(i-1));
if dist1(i)<=0.001&&dist2(i)<=0.001&&dist3(i)<=0.001
r=g1(i);
g=g2(i);
b=g3(i);
k=i;break;
endend
img=uint8(img);
img(imgimg(img>r&imgimg(img>g)=255;
subplot(1,2,2),imshow(img);title(' 聚类后的图像')
m=5;for i=1:m
i=imadd(img1,img);
end**g_a=i/(m+1);
bw=**g_a;
bw1=bw*3;
psf=fspecial('**erage',3);%产生psf
j=imfilter(bw1,psf);%算术均值滤波。
k1,noise]=wiener2(j,[5,5]);自适应滤波。
j1=imadjust(k1,[0.3 0.7],[0 1],1);
l1=img2-j1;%和噪声**做差值。
figure(3);
subplot(231);imshow(bw);
subplot(232);imshow(bw1);
subplot(233);imshow(j);
subplot(234);imshow(k1);
subplot(235);imshow(j1);title('最终结果图')
subplot(236);imshow(l1);title('和噪声**做差值')
toc;
模式识别大作业
一。问题重述。利用fisher线性判别法和最近邻算法对sonar数据进行分类,并得出正确率。二。fisher线性判别法思路。用训练样本求出d维空间到一维空间的投影方向w,进而求出样本均值,进而可求出阈值t,带入测试样本得到投影点y,将y与t相比,即可进行分类判别。2.1 fisher准则函数中的基本...
模式识别大作业
作业1 用身高和 或体重数据进行性别分类 一 基本要求 用和的数据作为训练样本集,建立bayes分类器,用测试样本数据对该分类器进行测试。调整特征 分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。具体做法 1 应用单个特征进行实验 以 a 身高或者 b 体重数...
模式识别大作业
一 题目。对sonar和wdbc中数据 如表1所示 进行分类,并将实验结果填入表2。不降维方法用邻近法,降维用fisher判别 表1 实验数据。表2实验结果 准确率 二 fisher线性判别法。fisher线性判别分析的基本思想 通过寻找一个投影方向 线性变换,线性组合 将高维问题降低到一维问题来解...