anber_jia 发表于 2007-5-2 17:46

我做的图像匹配的程序有些问题,请大家看看是为啥

我做的是一个图像匹配的程序。就是在一幅图上找到小十字的坐标,我做的实验是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 编辑 ]

anber_jia 发表于 2007-5-2 17:50

我做的程序,100*100和256*256的程序,最后找到坐标后x=0,
而256以上的图像减出来的x都等于-4546,找到的坐标也不正确,不知道是为什么

eight 发表于 2007-5-2 23:45

原帖由 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小,找不到是正常的

anber_jia 发表于 2007-5-3 13:48

不是啊,我定义的是11*11的模板滑块,在图像上滑动,和原来的小十字模板相减。
而且为什么100*100和256*256的能找到,而300以上找不到呢

eight 发表于 2007-5-3 13:51

原帖由 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

anber_jia 发表于 2007-5-3 14:16

不是,我有写%for i=6:261
               %for j=6:261
         %for i=6:305
            %   for j=6:305
我根据图的大小,也把循环的多少改了

robey 发表于 2009-8-12 19:49

看看 你现在弄出来没?

lance2008 发表于 2010-8-24 11:06

{:{13}:}学习一下!!!
页: [1]
查看完整版本: 我做的图像匹配的程序有些问题,请大家看看是为啥