matlab批量取消注释代码_一段批量处理图片的代码,看看错哪了,代码注释很详细...

该代码旨在批量读取图片,提取特定行的白色像素坐标,并计算角度。在处理过程中遇到数组索引超出范围的错误。问题可能出在检测和保存像素点坐标的方法上。代码详细注释了每个步骤,包括读取图片、遍历像素、判断像素数量和计算角度等环节。
摘要由CSDN通过智能技术生成

下面这段代码,是要批量读取图片,并提取符合要求的像素坐标,最后计算出角度并作图。运行时,提示检测后保存坐标的数组A,超出索引,A的维数为0,难道是我的检测坐标点的程序错了,还是保存的方法不对?

mm=[];nn=[];mm(1)=0;nn(1)=0;t=1;%用来记录上一次循环的某些数值

for i=15:1:92                         %准备处理第15到92号二值图像

I=imread([num2str(i),'.png']);   %顺序读取第i张图片

I_size=size(I);                  %图片矩阵大小

H=I_size(1);

W=I_size(2);

A=[];s=1;                      %空向量,用来记录白色像素点x坐标

B=[];d=1;

C=[];f=1;

for j=1:H                       %扫描图片1到H行

if  j==round(0.47*H)      %找到第round(0.47*H)行

for k=1:W                    %然后扫描此行像素

if I(j,k)==255             %找出白色像素点

A=[A k] ; s=s+1;       %记下各点x坐标,放入向量A

end

end

elseif j==round(0.715*H)    %同上 , 第round(0.715*H)行

for k=1:W

if I(j,k)==255

B=[B k]; d=d+1;

end

end

elseif  j== round(0.961*H)    %同上,第round(0.961*H) 行

for k=1:W

if I(j,k)==255

C=[C k]; f=f+1;

end

end

else

end

end

switch  d                   %判断白色像素点个数

case d==5                     %有4个,那么分别赋值给b1到b4,b1到b4是用于后面坐标计算

b1=B(1); b2=B(2); b3=B(3); b4=B(4);

case d==4                        %有3个,分别赋值

b1=B(1); b2=B(2); b3=B(2); b4=B(3);

case d==3                        %有2个,赋值给b1和b4,b2和b3用上一次循环的值插入

m=mm(t);               %插值数组,用索引t找到上次循环的插值赋值给m

b1=B(1);b4=B(2);b2=b1+m;b3=b4-m;

otherwise

end

if  f==5                            %另一行检测出的坐标,判别原理同上

c1=C(1); c2=C(2); c3=C(3); c4=C(4);

elseif f==4

c1=C(1); c2=C(2); c3=C(2); c4=C(4);

elseif f==3

n=nn(t);

c1=C(1);c4=C(2);c2=c1+n;c3=c4-n;

else

end

t=t+1;          %插值数组的索引,每次循环+1

a1=A(1);a2=A(2);            %把向量A的第1,2个坐标赋值给a1和a2

x3=a1+(a2-a1)*0.5;   y3=0.47*H;   %坐标计算

mm(t)=b4-b3;                %把插值存到数组mm

q1=b1+(b2-b1)*0.5;      q2=b3+(b4-b3)*0.5;  %计算出坐标q1,q2

y24=0.715*H;                                               %纵坐标

nn(t)=c4-c3;                %同上

e1=c1+(c2-c1)*0.5;      e2=c3+(c4-c3)*0.5;

y15= 0.961*H;

if (i>=21&&i<=42)||(i>=61&&i<=81)    %  if语句是根据图片的序号,分配坐标

x2=q1;x4=q2;

else

x2=q2;x4=q1;

end

if (i>=25&&i<=44)||(i>=65&&i<=84)

x1=e1;x5=e2;

else

x1=e2;x5=e1;

end

z1=atan((x2-x1)/(y24-y15));        %分配后的坐标运算,得到角度

z2=atan((x3-x2)/(y3-y24));

z3=atan((x4-x3)/(y24-y3));

z4=atan((x5-x4)/(y15-y24));

l=[z1 z2 z3 z4];                 %存放角度到行向量l

L(:,i-14)=l';                 %把向量l转置并存到矩阵L

end

x=1:1:87;                         %以图片顺序为X轴

y=L;                               %矩阵元素为Y轴

plot([x;x;x;x]',y');              %画出每一列对应的角度变化曲线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值