我做的图像匹配的程序有些问题,请大家看看是为啥
我做的是一个图像匹配的程序。就是在一幅图上找到小十字的坐标,我做的实验是100*100的图像,和256*256的灰度图。都能找到坐标。做了人物,动物,风景的图像。但是做300*300,或400*400,500*500的图像却不能找到,大家看是什么原因呢,即使用只有小十字的图像。下面是我的源码
-
-- 程序初始化 ---
clear % 清除所有变量。否则工作空间窗口中保留的全局变量会影响新程序的运行结果。
clc % 清除所有命令。否则命令窗口中同时显示原有结果和新结果会引起混乱。
close all % 清除所有显示窗口。打开窗口过多影响运行速度。
% --- 读入图象 ---
baseimage=imread('xiaoshizi.bmp');
figure,imshow(baseimage); % 读入图象,打开窗口,显示图象
title('原始图像')
a = imread('3.bmp'); % 100*100的图像
%a = imread('gougou22.bmp');% 256*256的图像
%a = imread('1.bmp');% 500*500的图像
figure,imshow(a);
title('要识别的图像') % 读入图象,打开窗口,显示图象
%----建立模板---
a=double(a);
b=zeros(1,100);c=; % 给图像矩阵数据的最上和最下加入五行0。a+b=c
d=zeros(110,1);e=; % 给图像矩阵数据的最左和最右加入五列0。c+d=e
%b=zeros(1,256);c=; % 给图像矩阵数据的最上和最下加入五行0。a+b=c
%d=zeros(266,1);e=; % 给图像矩阵数据的最左和最右加入五列0。c+d=e
%b=zeros(1,300);c=; % 给图像矩阵数据的最上和最下加入五行0。a+b=c
%d=zeros(310,1);e=; % 给图像矩阵数据的最左和最右加入五列0。c+d=e
baseimage=double(baseimage);
M=baseimage %图小十字为模板
%----在识别的图象中取10*10的矩阵----
X=1000000000000;
for i=6:105
for j=6:105
%for i=6:261
%for j=6:261
%for i=6:305
% for j=6:305
T = [e(i-5,j-5) e(i-5,j-4) e(i-5,j-3) e(i-5,j-2) e(i-5,j-1) e(i-5,j) e(i-5,j+1) e(i-5,j+2) e(i-5,j+3) e(i-5,j+4) e(i-5,j+5);%将小十字模板与图中取出的11*11的模板作减法
e(i-4,j-5) e(i-4,j-4) e(i-4,j-3) e(i-4,j-2) e(i-4,j-1) e(i-4,j) e(i-4,j+1) e(i-4,j+2) e(i-4,j+3) e(i-4,j+4) e(i-4,j+5);
e(i-3,j-5) e(i-3,j-4) e(i-3,j-3) e(i-3,j-2) e(i-3,j-1) e(i-3,j) e(i-3,j+1) e(i-3,j+2) e(i-3,j+3) e(i-3,j+4) e(i-3,j+5);
e(i-2,j-5) e(i-2,j-4) e(i-2,j-3) e(i-2,j-2) e(i-2,j-1) e(i-2,j) e(i-2,j+1) e(i-2,j+2) e(i-2,j+3) e(i-2,j+4) e(i-2,j+5);
e(i-1,j-5) e(i-1,j-4) e(i-1,j-3) e(i-1,j-2) e(i-1,j-1) e(i-1,j) e(i-1,j+1) e(i-1,j+2) e(i-1,j+3) e(i-1,j+4) e(i-1,j+5);
e(i,j-5) e(i,j-4) e(i,j-3) e(i,j-2) e(i,j-1) e(i,j) e(i,j+1) e(i,j+2) e(i,j+3) e(i,j+4) e(i,j+5);
e(i+1,j-5) e(i+1,j-4) e(i+1,j-3) e(i+1,j-2) e(i+1,j-1) e(i+1,j) e(i+1,j+1) e(i+1,j+2) e(i+1,j+3) e(i+1,j+4) e(i+1,j+5);
e(i+2,j-5) e(i+2,j-4) e(i+2,j-3) e(i+2,j-2) e(i+2,j-1) e(i+2,j) e(i+2,j+1) e(i+2,j+2) e(i+2,j+3) e(i+2,j+4) e(i+2,j+5);
e(i+3,j-5) e(i+3,j-4) e(i+3,j-3) e(i+3,j-2) e(i+3,j-1) e(i+3,j) e(i+3,j+1) e(i+3,j+2) e(i+3,j+3) e(i+3,j+4) e(i+3,j+5);
e(i+4,j-5) e(i+4,j-4) e(i+4,j-3) e(i+4,j-2) e(i+4,j-1) e(i+4,j) e(i+4,j+1) e(i+4,j+2) e(i+4,j+3) e(i+4,j+4) e(i+4,j+5);
e(i+5,j-5) e(i+5,j-4) e(i+5,j-3) e(i+5,j-2) e(i+5,j-1) e(i+5,j) e(i+5,j+1) e(i+5,j+2) e(i+5,j+3) e(i+5,j+4) e(i+5,j+5)];
temp=0; % 模板初始值为0
for m=1:11
for n=1:11
temp = M(m,n)-T(m,n)+temp; %要识别图像的11个像素和模板的11个像素相减,累加出结果
end
end
if(temp<x) %-----寻找最小的temp值
X = temp;
h =i-6; %----y点坐标
k= j-6; %----x点坐标
end
end
end
save h; %----记录坐标
save k;
[ 本帖最后由 anber_jia 于 2007-5-2 17:47 编辑 ] 我做的程序,100*100和256*256的程序,最后找到坐标后x=0,
而256以上的图像减出来的x都等于-4546,找到的坐标也不正确,不知道是为什么 原帖由 anber_jia 于 2007-5-2 17:50 发表 http://forum.vibunion.com/forum/images/common/back.gif
我做的程序,100*100和256*256的程序,最后找到坐标后x=0,
而256以上的图像减出来的x都等于-4546,找到的坐标也不正确,不知道是为什么
你定义的矩阵都没有根据图象大小自动调整,而是取了固定值,并且比300小,找不到是正常的 不是啊,我定义的是11*11的模板滑块,在图像上滑动,和原来的小十字模板相减。
而且为什么100*100和256*256的能找到,而300以上找不到呢 原帖由 anber_jia 于 2007-5-3 13:48 发表 http://forum.vibunion.com/forum/images/common/back.gif
不是啊,我定义的是11*11的模板滑块,在图像上滑动,和原来的小十字模板相减。
而且为什么100*100和256*256的能找到,而300以上找不到呢
我说的是这个东西:
for i=6:105
for j=6:105 不是,我有写%for i=6:261
%for j=6:261
%for i=6:305
% for j=6:305
我根据图的大小,也把循环的多少改了 看看 你现在弄出来没? {:{13}:}学习一下!!!
页:
[1]