0

私は葉の病気を分類するプロジェクトに取り組んでいます。私は、kを適用しようとしているのは、病変領域が一緒にクラスタリングされるようにクラスタ化することを意味し、そのクラスタ化領域から特徴を抽出することができます。しかし、背景のために、私は病気の領域が背景と一緒に集中しているので正しくクラスタリングできません。k-meansクラスタリングを効果的に適用するために画像から背景を削除する方法

私の目標は、病気の領域をクラスタリングし、次に病気の領域から特徴を抽出して分類器を訓練することです。

アプローチ1から 私は葉の周りに輪郭を描くことを試みた後、四角形を描画し、その後、私は切り抜くことができますOpenCVのから分エリアRECT関数を使用しますが、輪郭は背景を除去するのに十分罰金ではありません。以下

コードである:

lower_green = np.array((60-s,100,50)) 
upper_green = np.array((60+s,255,255)) 
name = "Apple_healthy/image_85.jpg" 
bgr = cv2.imread(name) 
hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV) 
mask = cv2.inRange(hsv, lower_green, upper_green) 
mask = cv2.dilate(mask, None, iterations=50) 
_, contours, hier = cv2.findContours(mask.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 
mask = cv2.bitwise_not(mask) 
cnt = contours[-1] 
cv2.drawContours(bgr,[cnt],0,(0,0,255), 2) 
cv2.imshow('image', bgr) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

rect = cv2.minAreaRect(cnt) 
box = cv2.boxPoints(rect) 
box = np.int0(box) 
cv2.drawContours(bgr,[box],0,(0,0,255),2) 
cv2.imshow('sad',bgr) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Output of approach-1

アプローチ2から 直接kは画像にクラスタリングを意味適用します。しかし、このアプローチでは、病気の領域が背景と一緒に集まるので、病気の領域を一緒にまとめることはできません。

img = cv2.imread('Apple_black_rot/image_85.jpg') 

Z = img.reshape((-1,3)) 

# convert to np.float32 
Z = np.float32(Z) 

# define criteria, number of clusters(K) and apply kmeans() 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) 
K = 16 
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS) 

# Now convert back into uint8, and make original image 
center = np.uint8(center) 
res = center[label.flatten()] 
res2 = res.reshape((img.shape)) 

cv2.imshow('res2',res2) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Output of approach-2

オリジナル画像患部は異なった色相を持って

Original Image

+0

それはあなたに明らかなように見えるかもしれないが、私はあなたが病気の領域と背景呼び出すのか分かりません。紫色の基質、黒い影、緑の葉、そして茶色の色合いのさまざまな色合いが見えます。何が何 ?明示してください。 –

+0

背景には紫色の基材と黒い影が含まれています。患部には葉に茶色の色合いがあります。 – rishi

答えて

2

:以下のコードです。色相成分(HSVシステムから)を抽出し、グレースケール画像を得ることができます。この画像から、シャドーエッジ(写真参照)を除いて、セグメンテーションが問題ではないはずです。しかし、影も簡単に検出でき、この領域を中和することができます。

enter image description here

enter image description here

+0

あなたのansをありがとう。私は色相成分を抽出して最初の画像を取得しましたが、それ以降は追従できませんでした。 – rishi

+0

@rishi:これは2進化の簡単なケースです。 –

+0

同じ画像の色相を抽出し、色相についてOtsuの二値化をopencvを使って適用しましたが、2番目の画像と同様の結果が得られませんでした。 – rishi

関連する問題