我有一个计算机视觉课程的作业,但我遇到了问题。我需要使用旋转的 DoG 过滤器过滤掉下图中的黄线。
作为第一步,我想制作一个自定义的 2D 高斯内核(有 2 个不同的 sigma,因为他们在作业中要求它,我还不明白它的原因)。基本上我认为某些方向的模糊量会有所不同。
Gkernel = cv2.getGaussianKernel(5, 0.5)
Gkernel2 = cv2.getGaussianKernel(5, 0.35)
TGkernel2 = cv2.transpose(Gkernel2)
twoDG = Gkernel * TGkernel2
现在我使用 sobel 滤波器来创建高斯微分 (DoG) 滤波器;
DoG = cv2.Sobel(twoDG, cv2.CV_64F, 0, 1, ksize = 5) #derive in the y direction(first order)
现在我创建一个旋转矩阵,这样黄线在图像中是垂直的;
rot = cv2.getRotationMatrix2D((2,2), 15, 0.8)
rotDoG = cv2.warpAffine(DoG, rot, (DoG.shape[1], DoG.shape[0]))
img = cv2.imread('./images/'+sys.argv[1])#I pass the name of the file as a CLI argument
gray = cv2.cvtColor( img, cv2.COLOR_BGR2GRAY )
filtered = cv2.filter2D(gray, cv2.CV_64F, rotDoG)
如果我必须在没有老师指示的情况下解决这个问题,我会先旋转图像,使黄线处于垂直位置,然后应用 DoG 滤镜。从维基百科看,DoG 是一种带通滤波器,它会丢弃除少数原始灰度图像中存在的空间频率之外的所有空间频率。所以我只想保留现在垂直的黄线。
我做错了什么,为什么,你将如何解决这个问题?对于新手 CV 爱好者,我们将不胜感激。