それで、カラープロファイルを使用した道路検出は病理学的問題であると言うことから始めましょう。ただし、道路の色が一貫していて、照明によって認識しようとしているオブジェクトの色が変わらない場合は、ショットがある可能性があります。(これが屋外で撮影された場合、別のカメラで撮影された場合、影が発生した場合、または実際の環境で発生した場合、これは非常に困難になります)
ここに役立つかもしれないいくつかのことがあります。
事前に画像をスムージングしてみてください。最初の画像で悪い結果が得られる理由は、おそらく道路の小さなピクセル変動が原因です。それらをぼかすことができる場合、またはある種の流域またはローカル平均化を使用できる場合は、より一貫した色の領域が得られる可能性があります。
HSVやRGBの代わりにLAB色空間を使用することも検討してください。
エッジ検出(matlabのキャニーエッジ検出器を参照)を使用すると、境界情報を取得できる場合があります。滑らかなオブジェクトを探している場合、その中にはあまり多くのエッジはありません。
編集:私は最も単純な方法でこのアドバイスに固執しようとしました。結果のコードといくつかのサンプルを次に示します。
im=rgb2gray(im) %for most basic color capturing.. using another color space is better practice
%imshow(im)
RoadMask=roipoly(im)%create mask
RoadMask=uint8(RoadMask);%cast to so you can elementwise multiply
im=im.*RoadMask;%apply mask
[x y]=size(im);
for i=1:x
for j=1:y
%disp('here')
if (im(i,j)<160 || im(i,j)>180) %select your values based on your targets range
im(i,j)=0; %replace everything outside of range with 0
%disp(im(x,y)) %if you'd like to count pixels, turn all values
end %within range to 1 and do a sum at end
end
end
最初にRGBからグレースケールに変換され
、道路の灰色度にほぼ一致する領域が選択されました。
道路の一部がキャプチャされておらず、ブロック状のエッジがあることに注意してください。このような-------------^
この実装は迅速で汚いものでしたが、忘れる前にそれを我慢したかったのです。スムージング、サンプリング、およびLAB色空間を実装するコードで更新してみます。