我用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
这些是图像的结果:
这些是带有数字的结果:
如您所见,这是一个愚蠢的问题,但我不知道如何解决。 起初,我在考虑图像尺寸,但是我不确定,因为数字和图像都是相同尺寸(86 * 140像素,分辨率为72像素/厘米) 有一些非常错误的信息,但我无法弄清楚。 您能帮我这个忙吗? 预先感谢。
更新:我正在尝试一些不同的图像尺寸,但令人惊讶的是,我意识到,如果第一张图片比其他两张图片稍微更详细(或在测试中可见更多像素到厘米,但只有第一个!)! ,最终网络给了我正确的结果 :)它变得越来越有趣了:)
这就是我在谈论图片: