在MATLAB中使用Hopfield神经网络进行图像模式识别

时间:2019-12-26 21:15:06

标签: matlab image-processing nnet

我用Hopfield Network写了一个简单的图像模式识别。希望当我使用数字模式时,我的代码中没有错误,但是当我尝试使用简单图像时,结果并不相同...

这是代码:

clc
clear
close all

mypictures = {'0.tif','1.tif','2.tif'};

X = zeros(770,3);
for k = 1:3
    im = imread(strcat('dataset//',mypictures{k}));
    im = imresize(im,0.25);
    im = im2bw(im);

    figure(1);
    subplot(2,5,k); imshow(im); title('train sample');

    X(:,k) = reshape(im,[],1);
end
X = 2*X-1;

net = newhop(X);

view(net);

my_noise = randn(size(X));
test_data = X;% + my_noise;
for k = 1:3
    test = test_data(:,k);
    %test(1:11*35)=-1;
    test = circshift(test,5);

    test_img = reshape(test,size(im));
    test_img = (test_img+1)/2;

    y_hat = net({1 100},[],test);

    y_hat_final = y_hat{100};
    y_hat_final = reshape(y_hat_final,size(im));
    y_hat_final = (y_hat_final+1)/2;

    figure(2);
    subplot(2,10,k); imshow(test_img,[]); title(sprintf('test input (%d)',k-1));
    subplot(2,10,k+10); imshow(y_hat_final,[]); title('net output');
end

这些是图像的结果:

results_with_images

这些是带有数字的结果:

results_with_numbers

如您所见,这是一个愚蠢的问题,但我不知道如何解决。 起初,我在考虑图像尺寸,但是我不确定,因为数字和图像都是相同尺寸(86 * 140像素,分辨率为72像素/厘米) 有一些非常错误的信息,但我无法弄清楚。 您能帮我这个忙吗? 预先感谢。

更新:我正在尝试一些不同的图像尺寸,但令人惊讶的是,我意识到,如果第一张图片比其他两张图片稍微更详细(或在测试中可见更多像素到厘米,但只有第一个!)! ,最终网络给了我正确的结果 :)它变得越来越有趣了:)

这就是我在谈论图片:

pictures_with_various_scales

0 个答案:

没有答案