使用filter2D制作旋转的DoG滤镜

时间:2017-04-19 12:28:28

标签: python opencv computer-vision gaussianblur

我有一个ComputerVision课程的作业,我遇到了麻烦。我需要使用旋转的DoG滤镜过滤掉下面图像的黄线。

Image we will be working with

作为第一步,我想制作一个自定义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爱好者的赞赏。

0 个答案:

没有答案