Я хочу повысить точность бинарного изображения

Я использовал пороговое значение Otsu, чтобы преобразовать изображение в градациях серого в двоичное. Но точность не очень, хочу улучшить.

импортировать cv2 из matplotlib, импортировать pyplot как plt

деф основной():

imgpath="F:\\Final_Project\\dataset\\im0001.ppm"
img=cv2.imread(imgpath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Hello",img)
#grayscale
cv2.imshow('Gray image', gray)
cv2.waitKey(5000)
cv2.destroyAllWindows()
#histogram
plt.hist(gray.ravel(),256,[0,256]);
plt.show()
#otsu thresholding
blur = cv2.GaussianBlur(gray,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("Otsu",th3)
cv2.waitKey(0)
cv2.destroyAllWindows()
# find otsu's threshold value with OpenCV function
thresh=-1
ret, otsu = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
print( "{} {}".format(thresh,ret) )

if name == "main": main()

это исходное изображение

это бинарное изображение, которое я получаю, используя свой код

это гистограмма


person Eddy    schedule 06.08.2019    source источник
comment
Ваша гистограмма показывает, что изображение имеет 3 пика. Однако Otsu работает только для изображений с двумя вершинами. Возможно, вы захотите узнать, как изменить Otsu для многоуровневой пороговой обработки. Здесь обсуждаются некоторые подходы: stackoverflow.com/questions/22706742 /   -  person Apoorv    schedule 07.08.2019
comment
Можете ли вы поделиться своим исходным изображением? Мне кажется, это сканирование сетчатки.   -  person T A    schedule 07.08.2019
comment
Я добавил исходное изображение   -  person Eddy    schedule 08.08.2019