本人刚开始编程,matlab是新手,编程也是白痴,在此求教,谢过!
我现在做的是目标检测,中间用到子矩阵提取,就是图像是200*300的矩阵,分为10*10个子矩阵,s(1,1)代表1~20行,1~30列的子矩阵,s(2,2)代表21~40行,31~60列的子矩阵,以此类推。然后用otsu算法(即graythresh函数)将每个子矩阵求阈值,保存在t矩阵中,t(1,1)表示s(1,1)的阈值(t(1,1)为一个数,s(1,1)为一个矩阵;t为10*10,s为20*30)
最后t的阶数总不对,解决不了啊!请大家帮忙!谢了!
程序如下:
f=imread('car_2.bmp'); % 读取图像;
[x,y]=size(f); % x,y为图像的行数和列数;
m=20;n=30; % 手动定义子图像的行数和列数;
s=zeros(m,n); % s表示子矩阵;
t=zeros(10,10); % t为阈值矩阵;
rx=1:m:x;
cy=1:n:y; % rx和cy是子图像左上角的坐标;
rowhigh=rx+m-1; % rowhigh和colhigh是子图像历遍的终点,即为右下角的坐标;
colhigh=cy+n-1;
xcount=0; % 设置x方向的计数器;
for r=rx:rowhigh; % rx,cy为子图像左上角的坐标;
xcount=xcount+1;
ycount=0;
for c=cy:colhigh;
ycount=ycount+1;
s(xcount,ycount)=f(r,c);
t(xcount,ycount)=graythresh(s(xcount,ycount)); % 用Otsu算法求每幅子图像的最佳阈值,保存在阈值矩阵t中;
end
end
I=imresize(t,[x,y]); % 插值后的阈值矩阵I与原图像的行数和列数相等;
H=f>I; % 将阈值矩阵与图像矩阵比较,将亮的部分提取出来;
g=H*255;
figure(1);
imshow(f);title('原始图像') % 显示原图像;
figure(2);
imshow(g);title('处理结果') % 显示处理后的结果;
最后再说一遍,我是菜鸟,大家不要笑话我。谢了!
[本帖最后由 mooni 于 2009-4-7 16:43 编辑]