PNN概率神经网络

1、贝叶斯决

假设对于测试样本 x x x,共有 m m m中类别可能 { w 1 , ⋯ , w m } \{ w_1 , ⋯ , w _m\} {w1,,wm},则判断样本类别的贝叶斯决策是:
max ⁡ { p ( w 1 ∣ x ) , p ( w 2 ∣ x ) , ⋯   , p ( w m ∣ x ) } \max \{ p({w_1}\left| x \right.),p({w_2}\left| x \right.), \cdots ,p({w_m}\left| x \right.)\} max{p(w1x),p(w2x),,p(wmx)}

2、PNN网络

如下图所示,假设特征有三个维度,被分为三大类。
PNN概率神经网络_第1张图片
首先我们计算待分类数据到各个子类中心 { x 11 . . . x 33 } \{x_{11}... x_{33}\} {x11...x33}的距离,并使用高斯核函数作为映射函数,计算结果 { y 11 . . . y 33 } \{y_{11}... y_{33}\} {y11...y33}视为到该子类的概率。然后对属于某一大类下的所有子类概率进行求和,得到数据属于该大类的概率 g g g,最后使用贝叶斯决策进行类别判断。

颜色判别案例

假设我们要将下列图像分割为前景色和背景色两大类(即二值化图像):
在这里插入图片描述
运用PNN神经网络分类像素点的颜色RBG值,将接近蓝色或者背景中出现的其他颜色分为A类,表示背景色;将接近白色的颜色分为B类,表示车牌号色。

再用0、1这两个数值来表示A类、B类,重新设置图片中像素的颜色实现了车牌号图像的二值化。

模式层里的每个神经元代表一种样本颜色

可以看到即使训练完了再添加其他样本颜色非常方便,只要添加一个神经元即可无须改动先前训练好的神经网络,这也是PNN神经网络的一个很大的优势

神经网络结构实现的伪代码如下:

  号码颜色模式总数countHM;
  背景颜色模式总数countBJ;
  分类模式总数:countN=countBJ+countHM
  double w[countN][3];//R、G、B三个维度
  int a[countN][2];//A、B两类

 

PNN神经网络判别某个像素的类别:
{
    FOR 每个模式层单元 j
        计算某个像素归一化颜色值:
        w[j][Xr,b,g]= X{r,b,g}/ sqrt(Xr*Xr+Xb*Xb+Xg*Xg); 
        判断像素所属类别:
         IF 颜色属于车牌号码  a[j][1]=1;
         IF 颜色属于车牌背景 a[j][0]=1;
}

PNN 神经网络图像分类算法为代码:
{
 FOR 每一行
 	FOR 每一列
 	   BJ=0 
 	   HM=0
        判断该像素点所属类别 estimate(Xr,b,g):
        {
           FOR 每一个模式层神经元{
             计算相似度
			 net=w[i][0]*Xr+w[i][1]*Xb+w[i][2]*Xg;
			 高斯核映射为概率:
			 pnet=exp((net-1)/(Q * Q)); //Q为判别颜色相似窗口大小
			 累计该子类所属的大类概率:
			 IF (a[i][0] == 1)
				BJ +=pnet
			 IF (a[i][1] == 1)
				HM +=pnet
           }
			取得max的类别,如果 BJ 则为背景,否则就是号码;
			//在BJ于HM 取相同值时默认为号码类
			IF BJ >= HM 
			        Val=0
			 ELSE
                  Val=1   
}

分类结果为:
在这里插入图片描述

你可能感兴趣的:(图像处理,人工智能,c语言,神经网络,机器学习,计算机视觉)