我试着检测眼睛后面(眼底)的圆盘和杯子,以便以后计算某些东西。下面是眼睛的图像:
我只是尝试使用OpenCV和python来检测磁盘,或者图像右侧较大的黄色圆圈,以及杯子,或者第一个圆圈内较小的黄色圆圈,这样我就可以最终执行某些计算了。在
到目前为止,我已经尝试使用拉普拉斯滤波使圆圈更突出。在
这是我的代码:import cv2
import numpy as np
from matplotlib import pyplot as plt
from pylab import *
# loading image
img0 = cv2.imread('01_g.jpg',)
# converting to gray scale
gray = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
# remove noise
img = cv2.GaussianBlur(gray,(3,3),0)
# convolute with proper kernels
laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5) # x
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5) # y
magnitude = sqrt(sobelx**2+sobely**2)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()
这是我得到的结果:
正如你所看到的,拉普拉斯滤波器一点帮助也没有——事实上,杯子和碟片甚至看不见。索贝尔克斯和索贝里至少勾勒出了外圈的轮廓(圆盘)
我也尝试过拉普拉斯绝对值:
^{pr2}$
我得到的结果是:
#difference of gaussians
blur1 = cv2.GaussianBlur(img,(3,3),1)
blur2 = cv2.GaussianBlur(img,(5,5),1.1)
difference = blur2 - blur1
plt.imshow(difference, cmap = 'gray')
plt.show()
但这也没给我任何帮助。我真的很感谢你的帮助,我可以如何去检测这张图片中的杯子和碟片。在