1.-输入图像
A=imread('001.jpg');
hf=figure(1);
ax=gca
imshow(A);
2.-调整对比度
th_low=.3 % low contrast threshold
th_high=.7 % high contrast threshold
A2=imadjust(A,[th_low th_low th_low; th_high th_high th_high],[]);
如果不调整对比度,就会有一些“铃声”。
沿示例横截面显示我所说的“振铃”
hold(ax,'on');
plot(ax,[130:190],200,'b*')
figure(2);
stem([130:190],A(200,[130:190],1),'Color','r');
grid on
hold on
title('without contrast adjustment')
stem([130:190],A(200,[130:190],2),'Color','g');
stem([130:190],A(200,[130:190],3),'Color','b');
figure(3);
stem([130:190],A2(200,[130:190],1),'Color','r');
grid on
hold on
title('with contrast adjustment')
stem([130:190],A2(200,[130:190],2),'Color','g');
stem([130:190],A2(200,[130:190],3),'Color','b');
感兴趣的截面的方差要低得多
沿着内侧是感兴趣的,在提高对比度后,末端更清晰
3.-在感兴趣的区域内获取单点参考
我知道你会喜欢没有任何互动的,谁会不同意呢。
然而,单点只是跳过识别感兴趣的区域,即目标地带。
这样的分类并不困难,但很费力,我希望你同意这样一个事实,即这样的分类至少需要另一个问题,例如:“在这些分割的区域中找到头盔、道路限制、人行道。”。。直到进入兴趣地带。
figure(4)
ax4=gca
imshow(A2)
hold(ax4,'on');
print('click on 1 point inside area of interest');
[y0,x0]=ginput(1);
x0=floor(x0);y0=floor(y0);
plot(ax4,y0,x0,'g*');
Ar=A2(:,:,1); % red
Ag=A2(:,:,2); % green
Ab=A2(:,:,3); % blue
ar0=double(Ar(x0,y0))
ag0=double(Ag(x0,y0))
ab0=double(Ab(x0,y0))
er_r=.05;er_g=.05;er_b=.05; % error threshold 1%
d1=5; % NOT euclidean, ABS distance
nxr=1;nxl=1;nyu=1;nyd=1;
A0=[Ar(x0,y0) Ag(x0,y0) Ab(x0,y0)]
A_right=[Ar(x0+nxr,y0) Ag(x0+nxr,y0) Ab(x0+nxr,y0)]
A_left=[Ar(x0-nxl,y0) Ag(x0-nxl,y0) Ab(x0-nxl,y0)]
A_up=double([Ar(x0,y0+nyu) Ag(x0,y0+nyu) Ab(x0,y0+nyu)])
A_down=double([Ar(x0,y0-nyd) Ag(x0,y0-nyd) Ab(x0,y0-nyd)])
while abs(double(A0(1))-double(A_right(1)))<d1 && ... % right
abs(double(A0(2))-double(A_right(2)))<d1 && ...
abs(double(A0(3))-double(A_right(3)))<d1 && ...
y0+nxr<size(Ar,2)
plot(ax4,y0+nxr,x0,'b*')
nxr=nxr+1;
A_right=[Ar(x0,y0+nxr) Ag(x0,y0+nxr) Ab(x0,y0+nxr)]
plot(ax4,y0+nxr,x0,'r*')
end
while abs(double(A0(1))-double(A_left(1)))<d1 && ... % left
abs(double(A0(2))-double(A_left(2)))<d1 && ...
abs(double(A0(3))-double(A_left(3)))<d1 && ...
y0-nxl>1
plot(ax4,y0-nxl,x0,'b*')
nxl=nxl+1;
A_left=[Ar(x0,y0-nxl) Ag(x0,y0-nxl) Ab(x0,y0-nxl)]
plot(ax4,y0-nxl,x0,'r*')
end
while abs(double(A0(1))-double(A_down(1)))<d1 && ... % down
abs(double(A0(2))-double(A_down(2)))<d1 && ...
abs(double(A0(3))-double(A_down(3)))<d1 && ...
x0+nyd<size(Ar,1)
plot(ax4,y0,x0+nyd,'b*')
nyd=nyd+1;
A_down=[Ar(x0+nyd,y0) Ag(x0+nyd,y0) Ab(x0+nyd,y0)]
plot(ax4,y0,x0+nyd,'r*')
end
while abs(double(A0(1))-double(A_up(1)))<d1 && ... % up
abs(double(A0(2))-double(A_up(2)))<d1 && ...
abs(double(A0(3))-double(A_up(3)))<d1 && ...
x0-nyu>1
plot(ax4,y0,x0-nyu,'b*') % check
nyu=nyu+1;
A_up=[Ar(x0-nyu,y0) Ag(x0-nyu,y0) Ab(x0-nyu,y0)]
plot(ax4,y0,x0-nyu,'r*') % check
end
生成的十字架
while循环中的绘图线只是为了确保“交叉”
最终到达它应该到达的地方。
你所说的“方向”现在可以找到进一步的处理
“十字架”的上侧。这应该很容易找到
上侧向左或向右“转弯”,因此为的“视觉方向”
驾驶员,这很可能是你只需要从标有条纹的驾驶员背部的姿态中获得的。
黑色&白色更容易,但现在你有了可能
直接寻找具有个性的hi-vi背心荧光绿
用鼠标点击一下就可以解决我切下的角。
我想进一步阐述和添加更多的脚本,精确地开发
这些结束语,但也许最好得到一些反馈
第一
对于以下步骤,如果您需要进一步的帮助,只需发布另一个问题,并让我知道下一个问题的链接。