2016-05-12 9 views
0

現在、航空写真/衛星画像から道路/高速道路を検出するためにMATLABを使用しています。私は道路とその周辺の価値の強さの違いについて同じ考え方のコードを書いています。しかし、道路以外の事業体も検出しているため、効率はそれほど高くありません。これに加えて、私はまた、これらの道路上の車両を検出し、道路の幅を試して計算しようとしています。私の現在のアプローチを改善したり、新しい方法を提案したりしてもらえますか?航空写真からの道路と車両の検出

ありがとうございます! :)

レビュー用にMATLABコードを添付しました。

clc 
clear all 
close all 

a=rgb2gray(imread('freeway24.tif')); 

a2=mean(a); 
t=min(a2); 

b=lt(a,t); 
[row_b, column_b]=size(b); 

for i=1:row_b 
for j=1:column_b 
    if b(i,j)~=1 
     b(i,j)=0; 
    else 
     b(i,j)=255; 
    end 
end 
end 

bw0=bwareaopen(b,50); 
bw1=bwmorph(bw0,'clean'); 
bw2=bwmorph(bw1,'majority'); 
bw3=bwmorph(bw2,'fill'); 
bw4=imfill(bw3,'holes'); 

[row_final,column_final]=size(bw4); 
bw_final=zeros(); 
for i=1:row_final 
for j=1:column_final 
    if bw4(i,j)==1 
     bw_final(i,j)=a(i,j); 
    else 
     bw_final(i,j)=0; 
    end 
end 
end 

subplot(1,2,1); 
imshow(a); 
title('Original Image'); 
subplot(1,2,2); 
imshow(bw_final); 
title('After detection'); 

注:私は評判ポイントが10ではないため、入力画像を投稿できません。ここに画像へのリンクをアップロードしました。 https://drive.google.com/open?id=0B0MIQKh4Irk8MVlXYnhIcmpxTG8

答えて

0

私はあなたのコンピュータビジョン、特にこれらのMATLAB関数についてもっと勉強勧め:imcloseimerodeimdilate、およびbwareaopen。 以下のコードを参考にしてください。最後のimshowの前に追加するだけです。

% Calculate disk of radius 2 pixels, 4 pixels diameter 
se = strel('disk', 2); 
% Connect the white pixels that are less than 4 pixels apart 
bw_final = imclose(bw_final, se); 
% Connect the black pixels that are less than 4 pixels apart 
bw_final = ~imclose(~bw_final, se); 

% Calculate 2% of the image pixels 
num2Percent = round(numel(bw_final)/50); 
% Remove white area smaller than 2% 
bw_final = bwareaopen(bw_final, num2Percent); 
% Remove black area smaller than 2% 
bw_final = ~bwareaopen(~bw_final, num2Percent); 
+1

確かにそれらを読み上げます!助けてくれてありがとう!しかし、これは高速道路上の車両を排除します。私はそれらの幅を検出できるようにブロブとして個々の車両を検出する必要があります。助言がありますか? –

+0

ああ、あなたは車を取り除きたいと思った、申し訳ありません。コード行を削除するだけで、 "2%未満の白い領域を削除"します。助けがあれば、答えとマークアップしてください:) – DomDev

+0

うまく動作します!どうもありがとう!はい、サムサップされます! –

関連する問題