请帮忙解释下这段matlab程序的意思,希望是一句一句的

[M,N]=size(I);
for k = 1: 3
J = zeros(M,N);
for i = 1: M
for j = 1:N
temp = I(i, j);
s1 = 0; s2 = 0;
range = [k: -1: 1];
for d = range
s1 = 2^(8-d) + s1; s2 = 2^(8-d+1);
if temp >= s1 & temp < s2;
J(i, j) = 255; break;
end
end
end
end
J = uint8(J);
figure; imshow(J);
end
end
如果回答的好有追加分数

代码后面多了个end。
[M,N]=size(I);%%得到I的行数和列数
for k = 1: 3 %%最外层循环
J = zeros(M,N);%%建立和I一样大小的0矩阵,用以得到新的图像
for i = 1: M
for j = 1:N
temp = I(i, j);%%i,j为坐标,把I中横坐标为i,纵坐标为j处的像素值赋给temp
s1 = 0; s2 = 0;%%初始化s1和s2
range = [k: -1: 1];%%当k=1时,range=1;当k=2时,range=[2,1];当k=3时,range=[3,2,1]
for d = range%%d和range取一样的值
s1 = 2^(8-d) + s1; s2 = 2^(8-d+1);%%s2没有进行累加,那么当d=1时,s2=256;当d=[2,1]时,第一次循环d=2,s2=128,第二次循环d=1,s2=256,该值覆盖128,所以最终s2=256;当d=[3,2,1]时,同样的道理,s2=256。s1进行累加,当d=1时,s1=128;当d=[2,1]时,第一次循环d=2,s1=64,第二次循环d=1,s1=128,所以最终s1=128+64=192;当d=[3,2,1]时,第一次循环d=3,s1=32,第二次循环d=2,s1=64,第三次循环d=1,s1=128,所以最终s1=128+64+32=224。
if temp >= s1 & temp < s2;
J(i, j) = 255; break;%%判断temp是否在s1和s2范围之内,是的话给J(i,j)赋值255。其实就是双阈值分割
end
end
end
end
J = uint8(J);
figure; imshow(J);%%显示图像J,总共三幅,第一幅的阈值128<=temp<256,第二幅的阈值192<=temp<256,第三幅的阈值224<=temp<256
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-19
[M,N]=size(I);%取I的行数和列数
for k = 1: 3
J = zeros(M,N);%J为MXN阶元素全为0的矩阵
for i = 1: M
for j = 1:N
temp = I(i, j);%I的第i行j列元素
s1 = 0; s2 = 0;
range = [k: -1: 1];%range为k,k-1,...,1向量
for d = range %d依次取range的每个元素进行循环
s1 = 2^(8-d) + s1; s2 = 2^(8-d+1);
if temp >= s1 & temp < s2;
J(i, j) = 255; break;
end
end
end
end
J = uint8(J);
figure; imshow(J);%播放图像
end
end
相似回答