2017-07-10 9 views
-4

に前景画像からランダムにパッチを抽出するには、ここでhttps://stackoverflow.com/a/31627979/3490988を説明しました。私は背景画像から前景分離のためのPythonコードを使用していパイソン

この入力画像を考える:このコードを実行する enter image description here

を:

def get_holes(image, thresh): 
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) 
    im_bw = cv.threshold(gray, thresh, 255, cv.THRESH_BINARY)[1] 
    im_bw_inv = cv.bitwise_not(im_bw) 

    contour, _ = cv.findContours(im_bw_inv, cv.RETR_CCOMP, cv.CHAIN_APPROX_SIMPLE) 
    for cnt in contour: 
    cv.drawContours(im_bw_inv, [cnt], 0, 255, -1) 

    nt = cv.bitwise_not(im_bw) 
    im_bw_inv = cv.bitwise_or(im_bw_inv, nt) 
    return im_bw_inv 

def remove_background(image, thresh, scale_factor=.25, kernel_range=range(1, 15), border=None): 
    border = border or kernel_range[-1] 

    holes = get_holes(image, thresh) 
    small = cv.resize(holes, None, fx=scale_factor, fy=scale_factor) 
    bordered = cv.copyMakeBorder(small, border, border, border, border, cv.BORDER_CONSTANT) 

    for i in kernel_range: 
     kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (2*i+1, 2*i+1)) 
     bordered = cv.morphologyEx(bordered, cv.MORPH_CLOSE, kernel) 

    unbordered = bordered[border: -border, border: -border] 
    mask = cv.resize(unbordered, (image.shape[1], image.shape[0])) 
    fg = cv.bitwise_and(image, image, mask=mask) 
    return fg 

img = cv.imread('koAl2.jpg') 
nb_img = remove_background(img, 230) 

はこのイメージになります:

上の画像で

enter image description here

、どのように効率的にIすることができますフォアグラウンドからサイズ64x64の10000個のランダムなパッチ(恐らく重複するもの)を抽出します。各パッチのピクセルの多くても10%が黒ですか?

+1

はStackOverflowのへようこそ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [on topic](http://stackoverflow.com/help/on-topic)および[How to Ask](http://stackoverflow.com/help/how-to-ask)をここで適用してください。 StackOverflowは、デザイン、コーディング、リサーチまたはチュートリアルサービスではありません。 – Prune

+4

投稿したコードは、あなたが提起した問題とは関係ありません。あなたはあなたの問題を解決する努力を示していません。その努力と結果を見なければなりません。 – Prune

答えて

1
  1. numpy.random.randintを使用して、イメージグリッド内のランダムピクセル座標を生成します。これを64x64パッチの左下にします。右上隅の座標を探します。注意:パッチの右上隅が画像内にとどまるように、制限値をnumpy.random.randintに調整するように注意してください。 IMG [Y1:Y2、X1:X2] 64×64の

  2. 10%程度である

  3. はnumpyのスライスを使用してパッチを抽出します。 410を使用するようnumpy.count_nonzero()としてnumpyの機能の1つの非ゼロ要素の数カウントする(ゼロの数は、64 * 64である - 非ゼロの)と0の数が410よりも大きいか小さいかどうかを確認:それが大きい場合410より大きい場合、黒は10%を超える画素を占め、410より小さい場合は黒が10%未満を占める。