|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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图
|