声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1755|回复: 2

[编程技巧] matlab高人帮帮小弟吧

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

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

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

x
这个是我毕设要用到的matlab程序 但是在运行中出现这样子的错误:
??? Index exceeds matrix dimensions.
Error in ==> super_noise_1 at 6
imagea=Iimage(1:1+223,1:1+223);
麻烦高人帮帮我怎么改这个程序,小弟在此谢谢了!
以下是成程序,是在matlab 7.1环境下运行的~~~

clear all;
%制作试验图像
Iimage=double(imread('lenna.bmp'));
imagea=zeros(224,224);
%原始高分辨率静态图像
imagea=Iimage(1:1+223,1:1+223);
%高斯滤波器的尺寸P×P
P=input('please input the dimension of the gauss block P as:\n');
%高斯滤波器的方差
del=input('please input del as:\n');
%高斯低通滤波器
gauss=fspecial('gaussian',[P P],del);
%filter the input image
org=filter2(gauss,imagea);
%确定附加噪声的方差
V=input('please input the var of the noise V as:\n');
%参考帧的数目
K=input('please input the num of the reference frames K as:\n');
%给定每一幅图像的相对位移
tran=zeros(2,K);
imageb=zeros(224,224,K);
%第一行存储了行坐标位移,第二行存储了列坐标位移
tran=input('please input the 2*K matrix tran as:\n');
%对基准图像进行平移、滤波。
for k=1:K
    imageb(:,:,k)=Iimage(1+tran(1,k):1+223+tran(1,k),1+tran(2,k):1+223+tran(2,k));
    imageb(:,:,k)=filter2(gauss,imageb(:,:,k));
end
%对图像进行抽样
[I1,I2]=size(imagea);%原始图像的尺寸
Q=input('please input the sample ratio Q as:\n');%Q为每一个方向上的尺寸缩小倍数
if mod(I1,Q)==0 & mod(I2,Q)==0  %当象素数目为Q的整数
for k=1:K
    unsampled=imageb(:,:,k);
    L1=I1/Q;L2=I2/Q;
        sampled=zeros(L1,L2);
        for l1=1:L1
            for l2=1:L2
                for i1=(Q*(l1-1)+1):(Q*l1)
                    for i2=(Q*(l2-1)+1):(Q*l2)
                        sampled(l1,l2)=sampled(l1,l2)+unsampled(i1,i2);
                    end
                end
                sampled(l1,l2)=(1/Q^2)*sampled(l1,l2);
            end
        end
        % 给参考图像加方差为V的噪声
        sampled=imnoise(uint8(sampled),'gaussian',0,V);
        sampled=double(sampled);
    B(:,:,k)=sampled; % B存储了K幅参考帧的数据
end
       %if mod(I1,2)==0|MOD(I2,2)==0  %当象素数为偶数时
       A=zeros(L1,L2);
       for l1=1:L1
            for l2=1:L2
                for i1=(Q*(l1-1)+1):(Q*l1)
                    for i2=(Q*(l2-1)+1):(Q*l2)
                        A(l1,l2)=A(l1,l2)+org(i1,i2);
                    end
                end
                A(l1,l2)=(1/Q^2)*A(l1,l2);
            end
        end
        %给基准图像加噪声,方差也是V
        A=imnoise(uint8(A),'gaussian',0,V);
        A=double(A);
    else
        disp('原始图像的尺寸不适当!');
    end
psf=zeros(P+Q-1,P+Q-1);
mat=zeros(P+Q-1,P+Q-1);
for x=1:Q
    for y=1:Q
        mat(x:P+x-1,y:P+y-1)=gauss;
        psf=psf+mat(:,:);
    end
end
psf=psf/Q^2; %计算每一点的模糊函数
h2=0;
for i=1:P+Q-1
    for j=1:P+Q-1
        h2=h2+psf(i,j)^2;  %模糊函数的归一化参数
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% A 为基准帧
% B 为K维的参考帧图像
% tran 存储了位移矢量,两行K列,每一列分别为其行、列位移分量
% psf 为模糊函数,在这里是空域不变的(也可以是空域变换的)
% h2 为模糊函数归一化参数
% P 为高斯滤波器尺寸
% Q 为图像放大倍数(每一个尺度)
% K 为参考帧数目
% imagea 为原始高分辨率图像
% gauss 为使用的高斯滤波器
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
save super_noise_1  A B tran psf h2 P Q K imagea gauss;

如果可以的话 希望能发到我邮箱:lhs_5@163.com  谢谢了!
回复
分享到:

使用道具 举报

发表于 2007-5-18 23:31 | 显示全部楼层
原帖由 lhs_5 于 2007-5-18 23:30 发表
这个是我毕设要用到的matlab程序 但是在运行中出现这样子的错误:
??? Index exceeds matrix dimensions.
Error in ==> super_noise_1 at 6
imagea=Iimage(1:1+223,1:1+223);
麻烦高人帮帮我怎么改这个程序 ...



这几天类似的问题我回答过不下5次,自己先动手搜索一下版面,关键词: Index exceeds matrix dimensions

[ 本帖最后由 eight 于 2007-5-18 23:34 编辑 ]
 楼主| 发表于 2007-5-18 23:55 | 显示全部楼层
具体的能帮忙看看吗?  我好像有些不理解啊~~
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-14 21:32 , Processed in 0.066019 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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