求解MATLAB对矩阵循环赋值问题,一直报错? 5
具体程序如下img=imread('D:\下载\指静脉\归一化图片','bmp');img=rgb2gray;%%%OTSU[m,n]=size(img);yuzh=0;...
具体程序如下
img=imread('D:\下载\指静脉\归一化图片','bmp');
img=rgb2gray;
%%% OTSU
[m,n]=size(img);
yuzh=0;
for yuzhi=1:255
xiaoyu=0;
dayu=0;
huidushu=zeros(1,255);
for huiduzhi=1:255
huidushu(1,huiduzhi)=sum(sum(img=huiduzhi));
end
for i=1:m
for j=1:n
if img[i,j]<yuzhi
xiaoyu=xiaoyu+1;
end
if img[i,j]>yuzhi
dayu=dayu+1;
end
end
end
for huiduzhi=1:yuzhi
ma=sum(huiduzhu*huidushu(huiduzhi)/xiaoyu);
end
for huiduzhi=yuzhi:255
mb=sum(huiduzhi*huidushu(huiduzhi)/dayu);
end
m=ma+mb;
pa=xiaoyu/m*n;
pb=1-pa;
s=pa*(ma-m)*(ma-m)+pb*(mb-m)*(mb-m);
end
if s>yuzh
g=yuzhi;
end
for i=1:m
for j=1:n
if img(i,j)<=g
h(i,j)=img(i,j)*double((img(i,j)/g).^l);
else
h(i,j)=1-(1-img(i,j))*double(((1-img(i,j))/(1-g)).^l);
end
end
end
figure,imshow(h);
主要是这句报错 huidushu(1,huiduzhi)=sum(sum(img=huiduzhi));
错误原因:等号左边的表达式不是赋值的有效目标。
不知道该怎么修改 展开
img=imread('D:\下载\指静脉\归一化图片','bmp');
img=rgb2gray;
%%% OTSU
[m,n]=size(img);
yuzh=0;
for yuzhi=1:255
xiaoyu=0;
dayu=0;
huidushu=zeros(1,255);
for huiduzhi=1:255
huidushu(1,huiduzhi)=sum(sum(img=huiduzhi));
end
for i=1:m
for j=1:n
if img[i,j]<yuzhi
xiaoyu=xiaoyu+1;
end
if img[i,j]>yuzhi
dayu=dayu+1;
end
end
end
for huiduzhi=1:yuzhi
ma=sum(huiduzhu*huidushu(huiduzhi)/xiaoyu);
end
for huiduzhi=yuzhi:255
mb=sum(huiduzhi*huidushu(huiduzhi)/dayu);
end
m=ma+mb;
pa=xiaoyu/m*n;
pb=1-pa;
s=pa*(ma-m)*(ma-m)+pb*(mb-m)*(mb-m);
end
if s>yuzh
g=yuzhi;
end
for i=1:m
for j=1:n
if img(i,j)<=g
h(i,j)=img(i,j)*double((img(i,j)/g).^l);
else
h(i,j)=1-(1-img(i,j))*double(((1-img(i,j))/(1-g)).^l);
end
end
end
figure,imshow(h);
主要是这句报错 huidushu(1,huiduzhi)=sum(sum(img=huiduzhi));
错误原因:等号左边的表达式不是赋值的有效目标。
不知道该怎么修改 展开
1个回答
展开全部
MATLAB二维矩阵赋值和C语言相仿,除了以下几点差别:
下标从1开始而不是0;
索引使用(i,j)而不是[i][j];
可以一个语句对多个元素(包括整个矩阵)同时赋值。
你说的只能给第一行赋值肯定是谢的代码有错,以下是一个简单的例子:
A=zeros(5,4);for r=1:5, for c=1:4,A(r,c)=r*10+c;end, end
你可以对照一下,看问题出在哪里。
for循环可以有a=a+5这样的语句,但不能有a+=5,因+=不是MATLAB的操作符。但是要注意,MATLAB 的for循环是基于索引的,这意味着,假如你的循环是for a=...的表达式,你不可能像C语言里那样通过再循环体内部修改a的值去改变循环的次数。
下标从1开始而不是0;
索引使用(i,j)而不是[i][j];
可以一个语句对多个元素(包括整个矩阵)同时赋值。
你说的只能给第一行赋值肯定是谢的代码有错,以下是一个简单的例子:
A=zeros(5,4);for r=1:5, for c=1:4,A(r,c)=r*10+c;end, end
你可以对照一下,看问题出在哪里。
for循环可以有a=a+5这样的语句,但不能有a+=5,因+=不是MATLAB的操作符。但是要注意,MATLAB 的for循环是基于索引的,这意味着,假如你的循环是for a=...的表达式,你不可能像C语言里那样通过再循环体内部修改a的值去改变循环的次数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询