2016-07-27 12 views
0

imfreehandを使用してユーザー制御バイナリマスクを作成しようとしています。私は、ユーザーが単一のリージョンの代わりに複数のリージョンを選択できるようにしようとしています。ある領域が画像tophatImageに描画されると、選択された領域のバイナリバージョンが画像totalBinaryに表示されます。ここまでは順調ですね。imfreehandを使用して複数のバイナリ領域を描画する方法

問題は、次の領域を描画する必要がある場合、先に描画された領域がtophatImageに消えてしまうことです。これは、ユーザがどの領域を描画したかを見ることができず、描画された領域を削除することができないため、問題となり得る。以前に描画された領域のバイナリバージョンはtotalBinaryのまま残っているため、問題はありません。

for-loopの中のsubplot(1,2,1); imshow(tophatImage)という行から問題が発生したと思います。新しい領域を描画する必要があるたびに、画像tophatImageがリセットされています。下の最初の画像でわかるように、3番目の画像のように画像が残っていません。修正されたコードを使用してコード

、領域がtophatImageから削除された場合、それがあるように、どのように私はそれを作ることができます修正し

オリジナル誤ったコード

subplot(1,2,1); imshow(tophatImage) 

hFH = imfreehand(); 
binaryImage = createMask(hFH); 
totalBinary = false(size(histogramEq)); 

for k = 1:5 
    totalBinary = totalBinary | binaryImage; 
    subplot(1,2,2); imshow(totalBinary); drawnow 

    subplot(1,2,1); imshow(tophatImage) 
    hFH = imfreehand(); 
    binaryImage = createMask(hFH); 
end 

totalBinaryに更新しましたか?

for k = 1:5 
    totalBinary = totalBinary | binaryImage; 
    subplot(1,2,2); imshow(totalBinary); drawnow 

    subplot(1,2,1); %imshow(tophatImage) % <-- Remove this 
    hFH = imfreehand(); 
    binaryImage = createMask(hFH); 
end 

Image

答えて

1

非常に簡単なエラー。ループでは、subplot(1,2,1);に電話をかけた後、imshow(tophatImage);へのコールを削除します。これは、あなたの図の内容を消去し、画像自体を表示しています。 imfreehandで描画した輪郭線を残したい場合は、imshowに電話しないでください。 imfreehandでは、図を閉じたり、内容を変更したりするまで、等高線は残ります。subplot

あなたは私が話しているか知っている絶対的に確認する:

for k = 1:5 
    totalBinary = totalBinary | binaryImage; 
    subplot(1,2,2); imshow(totalBinary); drawnow 

    subplot(1,2,1); %imshow(tophatImage) % <-- Remove this 
    hFH = imfreehand(); 
    binaryImage = createMask(hFH); 
end 
+0

それが今取り組んでいるが、私は地域を削除すると、いくつかの理由でtotalBinary' 'に更新されていないようですエラーが発生します。 – Senyokbalgul

+0

私はそれを試してみました。等高線とマスクの両方が更新されます。 – rayryeng

+0

コードはリージョンを削除しません。それは付加するだけです。地域を削除するにはこのコードであなたの投稿を更新してください。私は何ができるかを見ていきます。 – rayryeng

関連する問題