Sobelfilter numpy
def Sobelfilter(m):
kernelx = [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]
kernely = [[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]
m2 = ndimage.filters.convolve(m, kernelx, mode='nearest')
m3 = ndimage.filters.convolve(m, kernely, mode='nearest')
return (np.abs(m2+m3))
使用F.conv2d tensor
def sobel(batch_img):
ksize=3
C = 1
kernelx = torch.tensor([[-1.0, -2, -1], [0, 0, 0], [ 1, 2, 1]])
kernely = torch.tensor([[1.0, 0, -1], [2, 0, -2], [1, 0, -1]])
kernely = kernely.view(1, 1, ksize, ksize).repeat(C, 1, 1, 1)
kernelx = kernelx.view(1, 1, ksize, ksize).repeat(C, 1, 1, 1)
pad = (ksize - 1) // 2
batch_img_pad = F.pad(batch_img, pad=[pad, pad, pad, pad], mode='replicate')
weighted_pix = F.conv2d(batch_img_pad, weight=kernelx, bias=None,
stride=1, padding=0, groups=C)
weighted_piy = F.conv2d(batch_img_pad, weight=kernely, bias=None,
stride=1, padding=0, groups=C)
return torch.abs(weighted_pix + weighted_piy)
test
def testsobel():
emeloss = EME()
lambdaR = 0.299
lambdaG = 0.587
lambdaB = 0.114
path=r'F:\traindata_copy\LOL\eval_normal/normal00690.png'
img=cv2.imread(path,cv2.IMREAD_GRAYSCALE)
im=Sobelfilter(img)
img = np.expand_dims(img, axis=2)
source2 =torch.from_numpy(np.ascontiguousarray(img)).permute(2, 0, 1).float()
source2 = torch.unsqueeze(source2, dim=0)
img = source2
print(img.shape)
im2=sobel(img)
print(img.shape,im2.shape)
im2 = im2.data.squeeze().float().cpu().numpy()
cv2.imwrite(r'F:\traindata_copy\LOL/normal00690.png',im)
cv2.imwrite(r'F:\traindata_copy\LOL/normal006902.png',im2)
r, g, b = readgray(path )
r=np.array(r)
g=np.array(g)
b=np.array(b)
cv2.imwrite(r'F:\traindata_copy\LOL/normal00690r.png', r)
cv2.imwrite(r'F:\traindata_copy\LOL/normal00690g.png', g)
cv2.imwrite(r'F:\traindata_copy\LOL/normal00690b.png', b)
lo1 = lambdaR * (r) + lambdaG * (g) + lambdaB * (b)
cv2.imwrite(r'F:\traindata_copy\LOL/normal00690rgb.png', lo1)
print(lo1.shape)
输入
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7a4b861c466308d88d105cc0b49949f1.png)
Sobelfilter
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1812c895c33ab5ce56b4dafa3ee7d3a9.png)
R通道
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/72413d77a7d7aff505770eaa45d1aa8b.png)
G通道
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dc2cf3bac50a26fdfe837852298adc38.png)
B通道
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f2c933616e650b238dba8fdff8979e26.png)
RGB加权
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0e682bceff1a967ef2734bcf1dd4092f.png)
sobel 灰度图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8dcf9298705f8d3a6dff19fbfee8d480.png)