Einer meiner Freunde arbeitete an folgendem Projekt:Finden von Gruben in einem Bild
Unten ist das mikroskopische (SEM) Bild der Oberfläche des Edelstahls.
Aber man kann sehen, ist es ein wenig (nach langer Exposition gegenüber Meeresumwelt) und einige Vertiefungen auf der Oberfläche gebildet korrodiert. Einige der Gruben sind im roten Kreis markiert.
Er muss die Anzahl der Gruben im Bild finden und er hat es manuell gezählt (stell dir vor, es gibt fast 150 Bilder). Also dachte ich daran, diesen Prozess mit jedem Bildbearbeitungsprogramm zu automatisieren.
Frage:
Wie kann ich die Anzahl der Gruben in diesem Bild finden?
Was ich versucht:
Als ersten Schritt verbessert ich den Kontrast ein wenig durch Schließvorgang.
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('6.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
close = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
close2 = cv2.add(close,1)
div = (np.float32(gray)+1)/(close2)
div2 = cv2.normalize(div,None, 0,255, cv2.NORM_MINMAX)
div3 = np.uint8(div2)
Ergebnis:
Dann habe ich für einen bestimmten Schwellenwert für 127 und Konturen darin finden. Später werden diese Konturen basierend auf ihrer Fläche gefiltert (es gibt keine spezifische Information über die Fläche, ich habe einen Bereich von 1-10 als einen empirischen Wert genommen).
ret, thresh = cv2.threshold(div3, 127,255, cv2.THRESH_BINARY_INV)
temp, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
res = np.zeros(gray.shape,np.uint8)
for cnt in contours:
if 1.0 < cv2.contourArea(cnt) < 10.0:
res = cv2.drawContours(res, [cnt], 0, 255, -1)
plt.subplot(121); plt.imshow(img, 'gray'); plt.subplot(122); plt.imshow(res,'gray'); plt.show()
Aber es endete in viel extra Lärm. Das Ergebnis sehen Sie unten:
Weitere Informationen:
Einige Testbilder:
Eine andere Möglichkeit, Ihren Vorverarbeitungsschritt durchzuführen, wäre dies: http://scikit-image.org/docs/dev/auto_examples/plot_holes_and_peaks.html –