24小时热门版块排行榜    

查看: 644  |  回复: 2

希望有了

银虫 (小有名气)

[求助] matlab代码的修改 已有1人参与

请各位帮我修改一下下面的源代码,我已经修改了N次了都没有修改好,总是运行后报错,不知道怎么回事?请matlab高手指点迷津。
下面是我要用图像处理的两张图片。
(其中bd1是标准图像,bd2是在bd1的图像上移动了(1,1)个单位的图像)
这个源代码的功能主要是验证bd2图像是否是在bd1的基础上在x方向上和y方向上分别移动了一个单位,即计算出Δx=1,Δy=1.在此用了互相关分析匹配的原理。
注:或许这个单位有可能是错误的,还望各位高手能帮我编写一个这个代码,谢谢!网上的“笑脸”代表“冒号”
CODE:
clc;
clear all;
close all;
A = imread('bd1.JPG');%读取无火焰图像
B = imread('bd2.JPG');%读取有火焰图像
figure, subplot(121)
imshow(A)%显示A图像
subplot(122),
imshow(B)%显示B图像
%把两幅图像都分割成8x8的图像
C=cell(30,40);%把240x320图像分割成30x40个图像
for i = 1:30
    for j = 1:40
        C{i,j} = A(8*(i-1)+1:8*(i-1)+8,8*(j-1)+1:8*(j-1)+8);
    end
end
D=cell(30,40);
for i = 1:30
    for j = 1:40
        D{i,j} = B(8*(i-1)+1:8*(i-1)+8,8*(j-1)+1:8*(j-1)+8);
    end
end
%循环匹配子图像1200x1200次
for m=1:1200
    for n=1:1200
        c = normxcorr2(C{m}(:,:,1),D{n}(:,:,1));%对各块进行归一化互相关
        %figure,%创建新的图像窗口
        %surf(c),%显示两幅图像的归一化互相关
        %shading flat
        [max_c, imax] = max(abs(c(:)));%确定归一化互相关最大值及其位置
        P(m,n)=max_c;%最大值保存在P矩阵中   
    end
end


m_P_r=max(P');%对p矩阵转置求列最大值
for u=1:1200
   [row,col] = find(P(u,:)==m_P_r(u));
   zuobiao(u)=col;
end


py0 = mod(1:1200,30);%求余数(行)
for u=1:1200
    if py0(u)==0
        py0(u)=30;%把余数为0的值替换成30
    end
end
px0 = ceil((1:1200)/30); % 原始块,取整数加1(列)

py0_2=reshape(py0,30,40); % 一维转化为二维(把px0的数据转换成30x40的矩阵)
px0_2=reshape(px0,30,40); % 一维转化为二维(把px0的数据转换成30x40的矩阵)

for u=1:1200
    temp_py = mod(zuobiao(u),30);
    if temp_py==0
       temp_py=30; %把余数为0的值替换成30
    end
    temp_px = ceil(zuobiao(u)/30);
    py(u) = temp_py; % 匹配块x轴坐标
    px(u) = temp_px; % 匹配块y轴坐标
end
py_2=reshape(py,30,40); % 一维转化为二维
px_2=reshape(px,30,40);

y_p=py_2-py0_2; % y轴偏移量
x_p=px_2-px0_2; % x轴偏移量
figure
hold on
quiver(px0_2,py0_2,x_p,y_p,'-r'),hold off, axis image; %用箭头指示一个以(x_p,y_p)长度的向量


px00 = 8*px0_2-3;
py00 = 8*py0_2-3;
pxx = 8*px_2-3;
pyy = 8*py_2-3;
x_pp=px_2-px0_2; % x轴偏移量
y_pp=py_2-py0_2; % y轴偏移量


bd2.jpg



bd1.jpg[ Last edited by xiegangmai on 2013-5-16 at 19:38 ]
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : bd1.jpg
  • 2013-05-16 12:09:20, 13.38 K
  • 附件 2 : bd2.jpg
  • 2013-05-16 12:09:21, 15.66 K

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

您我都需援助,请大家献出援手!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

miuo

新虫 (初入文坛)

楼主在用normxcorr2函数的时候    c = normxcorr2(C{m}(:,:,1),D{n}(:,:,1));%对各块进行归一化互相关 ,D矩阵的大小要大于C矩阵的,这样都没报错啊
2楼2017-03-10 11:08:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

C = normxcorr2(template, A)
The matrix A must be larger than the matrix template for the normalization to be meaningful. The values of template cannot all be the same.

template的size要大于A,且template中的元素不能都一样。你这里两条都不满足,当然报错。
3楼2017-03-10 18:12:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 希望有了 的主题更新
信息提示
请填处理意见