MATLAB'da HEBB KURALI ve GÖRÜNTÜ IŞLEME

hebb1

% Heb net for bipolar AND data
clear; clc;
% Data
s1 = [1  1 -1 -1];
s2 = [1 -1  1 -1];
t  = [1 -1 -1 -1];
% Agirliklari sifirla
w1 = 0; w2 = 0; b = 0;
% Egitim: agirliklari ayarla
for i = 1:4
  x1 = s1(i);
  x2 = s2(i);
  y  = t(i);
  w1 = w1 + x1*y;
  w2 = w2 + x2*y;
  b  = b  + y;
end
% Sinama: Test
A = 1; B = -1;         % Girdiler
net = w1*A + w2*B + b; % Cikti
if net >= 1
    fnet = 1
else
    fnet = -1
end

hebb2

% Heb net for bipolar OR data
clear; clc;
% Data
s1 = [1  1 -1 -1];
s2 = [1 -1  1 -1];
t  = [1  1  1 -1];
% Agirliklari sifirla
w1 = 0; w2 = 0; b = 0;
% Egitim: agirliklari ayarla
for i = 1:4
  x1 = s1(i);
  x2 = s2(i);
  y  = t(i);
  w1 = w1 + x1*y;
  w2 = w2 + x2*y;
  b  = b  + y;
end
% Sinama: Test
A = 1; B = -1;         % Girdiler
net = w1*A + w2*B + b; % Cikti
if net >= 1
    fnet = 1
else
    fnet = -1
end

hebb3

% Pattern association for bipolar data
clear; clc;

% Data
s = [1 -1 -1 -1; ...
     1  1 -1 -1; ... 
    -1 -1 -1  1; ... 
    -1 -1  1  1];
t = [1 -1; 1 -1; -1 1; -1 1];

% train
W = s'*t;

% test
x = [1 1 -1 -1];
y = x*W;

a = find( y > 1 ); y(a) =  1;
b = find( y < 1 ); y(b) = -1;
y

hebb4

% Pattern association for gray data
clear; clc;
% Data
s = [1.0 -0.5  0.5 -1.0 -0.4; ...
     1.0 -0.2 -1.0 -0.5  0.4; ...
    -0.1 -0.3  0.9  1.0  0.3; ...
     0.2  0.5  0.6  0.9 -1.0; ...
     0.3  0.4  0.7  1.0 -0.9];
t = [ 1 -1 -1 -1; ...
     -1  1 -1 -1; ... 
     -1 -1  1 -1; ... 
     -1 -1 -1  1; ... 
     -1 -1 -1  1];
% train
W = s'*t;

% test
x = [0.3  0.4  0.7  1.0 -0.9];
y = x*W;
y
a = find(y > 1); y(a) =  1;
b = find(y < 1); y(b) = -1;
y

hebb5

% Pattern association for bipolar data
clear; clc;

% Data
s = [-1 -1 -1 -1  1  ...
     -1 -1  1 -1  1  ...
     -1 -1 -1 -1  1  ...
     -1 -1 -1 -1  1  ...
     -1 -1 -1 -1  1;

      1  1  1  1  1  ...
     -1 -1 -1 -1  1  ...
     -1 -1  1  1  1  ...
     -1 -1 -1 -1  1  ...
      1  1  1  1  1];
t = [1 -1; -1 1];

% train
W = s'*t;

% test
x = [-1 -1 -1 -1  1 -1 -1  1 -1  1  ...
     -1 -1 -1 -1  1 -1 -1 -1 -1  1  -1 -1 -1 -1  1];
% hesapla
y = x*W;
a = find(y > 1); y(a) =  1;
b = find(y < 1); y(b) = -1;
y

sifir_1 Fonksiyonu

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Bu fonkksiyon, bir dijital görüntü içindeki
% verinin bulunduğu kısmı keser ve onu yapay sinir 
% ağları için (Hebb net) için kullanılabilir hale getirir.
%
% dosya  Katar (string) tipinde görüntü dosyasının tam yolu
%        örnek: 'c:\resim\cicek.png'
%
% t2     Yeniden yapılandırılmış dizi
%
% Mart 2020
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function t2 = sifir_1(dosya)
  t1 = imcomplement(im2bw(imread(dosya))); % dosyayı al (matris)
  bolge = regionprops(t1);                 % bölge belirle
  t1 = imcrop(t1,bolge(1).BoundingBox);    % kırp
  t1 = imresize(t1,[100 100]);             % yeniden boyutlandır
  imshow(t1);                              % göster
  t2 = double(t1);                         % gerçel sayı matrisine çevir
  t2 = changem(t2,-1,0);                   % görüntü içindeki 0 -> -1 yap
  t2 = reshape(t2',1,[]);                  % t1 matrisi t2 dizisine çevir
end

Görüntü içinde karakter alıglama

% Pattern association with pictures
clear; clc;
% Data
a1 = sifir_1('t/a1.png'); 
a2 = sifir_1('t/a2.png');
a3 = sifir_1('t/a3.png');
aA = sifir_1('t/aA.png');
aB = sifir_1('t/aB.png');
aC = sifir_1('t/aC.png');
t1 = sifir_1('t/t1.png');
t2 = sifir_1('t/t2.png');
t3 = sifir_1('t/t3.png');
tA = sifir_1('t/tA.png');
tB = sifir_1('t/tB.png');
tC = sifir_1('t/tC.png');

s = [a1; a2; a3; aA; aB; aC; ...
     t1; t2; t3; tA; tB; tC]';

t = [+1 -1 -1 -1 -1 -1; ...
     -1 +1 -1 -1 -1 -1; ...
     -1 -1 +1 -1 -1 -1; ...
     -1 -1 -1 +1 -1 -1; ...
     -1 -1 -1 -1 +1 -1; ...
     -1 -1 -1 -1 -1 +1; ...
     +1 -1 -1 -1 -1 -1; ...
     -1 +1 -1 -1 -1 -1; ...
     -1 -1 +1 -1 -1 -1; ...
     -1 -1 -1 +1 -1 -1; ...
     -1 -1 -1 -1 +1 -1; ...
     -1 -1 -1 -1 -1 +1];
% train
W = s * t;
% test
x = sifir_1('t/e1.png');
y = x*W

% y dizisinin en büyüğününe bak ve karar ver
[deger indis] = max(y);
if indis == 1
    disp('Bu 1')
elseif indis == 2
    disp('Bu 2')
elseif indis == 3
    disp('Bu 3')
elseif indis == 4
    disp('Bu A')
elseif indis == 5
    disp('Bu B')
elseif indis == 6
    disp('Bu C')
end