声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2686|回复: 7

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

[复制链接]
发表于 2007-5-2 17:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我做的是一个图像匹配的程序。就是在一幅图上找到小十字的坐标,我做的实验是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=[b;b;b;b;b;a;b;b;b;b;b ];       % 给图像矩阵数据的最上和最下加入五行0。a+b=c
d=zeros(110,1);e=[d d d d d c d d d d d ];       % 给图像矩阵数据的最左和最右加入五列0。c+d=e
%b=zeros(1,256);c=[b;b;b;b;b;a;b;b;b;b;b ];       % 给图像矩阵数据的最上和最下加入五行0。a+b=c
%d=zeros(266,1);e=[d d d d d c d d d d d ];       % 给图像矩阵数据的最左和最右加入五列0。c+d=e
%b=zeros(1,300);c=[b;b;b;b;b;a;b;b;b;b;b ];       % 给图像矩阵数据的最上和最下加入五行0。a+b=c
%d=zeros(310,1);e=[d d d d d c d d d d d ];       % 给图像矩阵数据的最左和最右加入五列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图

100*100图
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-5-2 17:50 | 显示全部楼层
我做的程序,100*100和256*256的程序,最后找到坐标后x=0,
而256以上的图像减出来的x都等于-4546,找到的坐标也不正确,不知道是为什么
发表于 2007-5-2 23:45 | 显示全部楼层
原帖由 anber_jia 于 2007-5-2 17:50 发表
我做的程序,100*100和256*256的程序,最后找到坐标后x=0,
而256以上的图像减出来的x都等于-4546,找到的坐标也不正确,不知道是为什么



你定义的矩阵都没有根据图象大小自动调整,而是取了固定值,并且比300小,找不到是正常的
 楼主| 发表于 2007-5-3 13:48 | 显示全部楼层
不是啊,我定义的是11*11的模板滑块,在图像上滑动,和原来的小十字模板相减。
而且为什么100*100和256*256的能找到,而300以上找不到呢
发表于 2007-5-3 13:51 | 显示全部楼层
原帖由 anber_jia 于 2007-5-3 13:48 发表
不是啊,我定义的是11*11的模板滑块,在图像上滑动,和原来的小十字模板相减。
而且为什么100*100和256*256的能找到,而300以上找不到呢



我说的是这个东西:

for i=6:105
    for j=6:105
 楼主| 发表于 2007-5-3 14:16 | 显示全部楼层
不是,我有写%for i=6:261
               %for j=6:261
           %for i=6:305
            %   for j=6:305
我根据图的大小,也把循环的多少改了
发表于 2009-8-12 19:49 | 显示全部楼层
看看 你现在弄出来没?
发表于 2010-8-24 11:06 | 显示全部楼层
学习一下!!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-28 21:13 , Processed in 0.085554 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表