声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5347|回复: 15

[图像处理] 矩阵合成图像问题

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

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

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

x
我定义的想把r,g,b矩阵合成真彩图象的函数,可是出现了以下问题,想请教一下该怎么改才好啊?
x,y为维数. r,g,b为小波分解的结果,谢谢各位!
function Yt=RGBturecolor(r,g,b,x,y)
Yt=zeros(x,y,3);
YtR=(wcodemat(r,256)-1)/255;
YtG=(wcodemat(g,256)-1)/255;
YtB=(wcodemat(b,256)-1)/255;
for i=1:x
    for j=1:y
        Yt(i,j,1)=YtR(i,j);
        Yt(i,j,2)=YtG(i,j);
        Yt(i,j,2)=YtB(i,j);
    end
end
出现的错误是:Attempted to access YtR(1,149); index out of bounds because size(YtR)=[65,148].
Error in ==> RGBtruecolor at 11
        Yt(i,j,1)=YtR(i,j);
Error in ==> xiaobo at 16
ca1=RGBtruecolor(caR1,caG1,caB1,s1(1,1),s1(1,2));

这个是这个函数的原因还是我主函数的原因呢?
我的主函数就是用这个语句调用了一下而已啊ca1=RGBtruecolor(caR1,caG1,caB1,s1(1,1),s1(1,2));
回复
分享到:

使用道具 举报

发表于 2007-5-15 20:02 | 显示全部楼层
原帖由 shenzhi123 于 2007-5-15 18:03 发表
我定义的想把r,g,b矩阵合成真彩图象的函数,可是出现了以下问题,想请教一下该怎么改才好啊?
x,y为维数. r,g,b为小波分解的结果,谢谢各位!
function Yt=RGBturecolor(r,g,b,x,y)
Yt=zeros(x,y,3);
YtR=(wco ...



数组越界问题,先设置断点,后用主函数运行一次,调试一下就可以了
 楼主| 发表于 2007-5-15 20:09 | 显示全部楼层
请问断点怎么设置啊?应该怎么改才好呢?
我觉得好象(1,149)和[65,148]搭不上,可是不知道怎么改,可以再详细点吗?
是在这个程序里吗?还是要在主函数里?
用不用把主函数贴上来?
发表于 2007-5-15 20:12 | 显示全部楼层
原帖由 shenzhi123 于 2007-5-15 20:09 发表
请问断点怎么设置啊?应该怎么改才好呢?
我觉得好象(1,149)和[65,148]搭不上,可是不知道怎么改,可以再详细点吗?
是在这个程序里吗?还是要在主函数里?
用不用把主函数贴上来?


这种问题最好还是自己修改为好,至于调试,每个编程软件都一定有的,因为程序不可能一次编写成功,所以提供这个测试手段。在matlab中,编好程序,设置断点(菜单 Debug 有 Set breakpoint),运行程序(菜单 Debug 有 Run 或 Save & Run)。

建议多看看基础书,还有本版 置顶贴:聚宝盆 中提到的精华贴
 楼主| 发表于 2007-5-15 20:21 | 显示全部楼层
恩,好的,谢谢啊,那我再看看,
再请教个问题,这个是另一个程序的后半部分
%三级小波分解及显示
[c,s]=wavedec2(I,3,'db2');
ca3=appcoef2(c,s,'db2',3);  
ch3=detcoef2('h',c,s,3);
cv3=detcoef2('v',c,s,3);
cd3=detcoef2('d',c,s,3);
ch2=detcoef2('h',c,s,2);
cv2=detcoef2('v',c,s,2);
cd2=detcoef2('d',c,s,2);
ch1=detcoef2('h',c,s,1);
cv1=detcoef2('v',c,s,1);
cd1=detcoef2('d',c,s,1);
A2=[ca3*4,ch3*4;cv3*4,cd3*4];
%显示分解结果
k=s(2,1)*2-s(3,1);
ch2=padarray(ch2,[k k],1,'post');
cv2=padarray(cv2,[k k],1,'post');
cd2=padarray(cd2,[k k],1,'post');
A1=[A2,ch2*4;cv2*4,cd2*4];
k=s(2,1)*4-s(4,1);
ch1=padarray(ch1,[k k],1,'post');
cv1=padarray(cv1,[k k],1,'post');
cd1=padarray(cd1,[k k],1,'post');
A=[A1,ch1*4;cv1*4,cd1*4];
min=min(A(:));
max=max(A(:));
subplot(122);imshow(A,[min,max]);

程序的前面一直运行的很好,到了倒数第3行出现了错误
??? Subscript indices must either be real positive integers or logicals.

Error in ==> xiaobofenjie23 at 51
min=min(A(:));
是这个错误,前半部分程序和这个相近,就是二级分解和显示,也有min=min(A(:));这个语句,
但是没错误,请问这个是怎么回事啊,我调试好久了,都没明白,:@(
 楼主| 发表于 2007-5-15 20:23 | 显示全部楼层
我电脑最近有点不好使,中过毒,我想请教下,是我电脑的问题还是程序的问题啊?
发表于 2007-5-15 21:44 | 显示全部楼层
原帖由 shenzhi123 于 2007-5-15 20:21 发表
恩,好的,谢谢啊,那我再看看,
再请教个问题,这个是另一个程序的后半部分
%三级小波分解及显示
[c,s]=wavedec2(I,3,'db2');
ca3=appcoef2(c,s,'db2',3);  
ch3=detcoef2('h',c,s,3);
cv3=detcoef2('v',c,s ...


改为:
  1. myMin = min(A(:));
复制代码

试试
不要使用 matlab 的函数名作为变量
 楼主| 发表于 2007-5-15 22:02 | 显示全部楼层
谢谢啊,可是还是错误
??? Subscript indices must either be real positive integers or logicals.

Error in ==> xiaobofenjie23 at 51
myMin = min(A(:));
发表于 2007-5-15 22:08 | 显示全部楼层
原帖由 shenzhi123 于 2007-5-15 22:02 发表
谢谢啊,可是还是错误
??? Subscript indices must either be real positive integers or logicals.

Error in ==> xiaobofenjie23 at 51
myMin = min(A(:));



贴一下你的 A 矩阵
 楼主| 发表于 2007-5-15 22:22 | 显示全部楼层
clear all
I=imread('CIMG1037.JPG');
I=rgb2gray(I);
%二级小波
[c,s]=wavedec2(I,2,'db2');
ca2=appcoef2(c,s,'db2',2);  
ch2=detcoef2('h',c,s,2);
cv2=detcoef2('v',c,s,2);
cd2=detcoef2('d',c,s,2);
ch1=detcoef2('h',c,s,1);
cv1=detcoef2('v',c,s,1);
cd1=detcoef2('d',c,s,1);
A1=[ca2*4,ch2*4;cv2*4,cd2*4];
k=s(2,1)*2-s(3,1);
ch1=padarray(ch1,[k k],1,'post');
cv1=padarray(cv1,[k k],1,'post');
cd1=padarray(cd1,[k k],1,'post');
A=[A1,ch1*4;cv1*4,cd1*4];
min=min(A(:));
max=max(A(:));
subplot(121);imshow(A,[min,max]);  
%三级小波
[c,s]=wavedec2(I,3,'db2');
ca3=appcoef2(c,s,'db2',3);  
ch3=detcoef2('h',c,s,3);
cv3=detcoef2('v',c,s,3);
cd3=detcoef2('d',c,s,3);
ch2=detcoef2('h',c,s,2);
cv2=detcoef2('v',c,s,2);
cd2=detcoef2('d',c,s,2);
ch1=detcoef2('h',c,s,1);
cv1=detcoef2('v',c,s,1);
cd1=detcoef2('d',c,s,1);
A2=[ca3*4,ch3*4;cv3*4,cd3*4];
%显示分解结果
k=s(2,1)*2-s(3,1);
ch2=padarray(ch2,[k k],1,'post');
cv2=padarray(cv2,[k k],1,'post');
cd2=padarray(cd2,[k k],1,'post');
A1=[A2,ch2*4;cv2*4,cd2*4];
k=s(2,1)*4-s(4,1);
ch1=padarray(ch1,[k k],1,'post');
cv1=padarray(cv1,[k k],1,'post');
cd1=padarray(cd1,[k k],1,'post');
A=[A1,ch1*4;cv1*4,cd1*4];
myMin = min(A(:));
myMax = max(A(:));
subplot(122);imshow(A,[myMin,myMax]);
 楼主| 发表于 2007-5-15 22:22 | 显示全部楼层
谢谢啊
发表于 2007-5-15 22:26 | 显示全部楼层
原帖由 shenzhi123 于 2007-5-15 22:22 发表
谢谢啊


我要的是运行时你的 A 矩阵的值
 楼主| 发表于 2007-5-15 22:31 | 显示全部楼层
不好意思,理解错误
A矩阵的值好多,有正有负,这是截取其中的一段,这样可以吗?不行的话,我再从发
  -0.0090    0.0172   -0.0026    0.0019   -0.0023   -0.0026    0.0014   -0.0013
   -0.0041   -0.0208   -0.0030   -0.0036    0.0009    0.0043    0.0006   -0.0075
    0.0006   -0.0189   -0.0053   -0.0011    0.0035    0.0016    0.0070    0.0016
    0.0060    0.0081   -0.0020    0.0048    0.0007    0.0014   -0.0010    0.0018
    0.0023    0.0001    0.0066   -0.0083   -0.0060   -0.0020    0.0010    0.0028
   -0.0010    0.0011    0.0008   -0.0078   -0.0036   -0.0126    0.0012    0.0055
   -0.0043   -0.0007   -0.0026    0.0100    0.0032    0.0149   -0.0191   -0.0101
    0.0039   -0.0155    0.0079   -0.0013   -0.0006    0.0063   -0.0024   -0.0038
   -0.0014   -0.0052    0.0040    0.0049   -0.0109    0.0065    0.0047   -0.0012
   -0.0099   -0.0011   -0.0086   -0.0040   -0.0020   -0.0052   -0.0060    0.0061
   -0.0003    0.0083   -0.0172    0.0295    0.0088   -0.0125    0.0058   -0.0078
    0.0126   -0.0012   -0.0067   -0.0092   -0.0045   -0.0140    0.0015    0.0017
    0.0005    0.0070    0.0080    0.0076    0.0036   -0.0014    0.0047    0.0083
    0.0094    0.0011    0.0022   -0.0061   -0.0031    0.0053    0.0026   -0.0145
   -0.0039    0.0035    0.0056    0.0038    0.0039    0.0020   -0.0131   -0.0018
   -0.0117   -0.0015   -0.0035   -0.0132   -0.0011    0.0037    0.0092    0.0045
   -0.0050    0.0015   -0.0023    0.0131    0.0100    0.0054    0.0088   -0.0006
    0.0024   -0.0137   -0.0228   -0.0130   -0.0099   -0.0029    0.0003    0.0
 楼主| 发表于 2007-5-15 22:43 | 显示全部楼层
Cannot display variables with more than 524288 elements.
这个是在workspace中双击A打开时显示的文字,没显示矩阵
当我把图象改小后,改成800*252的以后,A就没有这句话了,
但运行上面的程序出现了这个错误
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.

Error in ==> xiaobofenjie23 at 45
A1=[A2,ch2*4;cv2*4,cd2*4];
发表于 2007-5-15 23:11 | 显示全部楼层
原帖由 shenzhi123 于 2007-5-15 22:43 发表
Cannot display variables with more than 524288 elements.
这个是在workspace中双击A打开时显示的文字,没显示矩阵


这个错误是没有关系的,可以不管

至于你的问题,一时这个错误,一时那个错误,我看不出来,建议先别急,看看基础书,多了解矩阵运算
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-14 05:12 , Processed in 0.073444 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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