Python图像自卷积消除纹理

 这里选用了scipy中的ndimage.convolve作为卷积函数,输入参数为被卷积图像和卷积核。

因为是要消除图像自身的纹理,所以对卷积的核要求比较大,尽量要大于17,但也不能太大,会过于模糊。

步骤是先将图像转为灰度图,随机选取和卷积核大小相同的正方形框小图像,尽量选取多个图像,取平均值,保证纹理特征能够适应整张图片。得出的最终小图像之后取加权平均值,类似于高斯模糊一样的效果,这样卷积出来的结果就能有效的消除图像纹理。

这样做的好处就是能够消除图像普遍性的纹理,但是对于特殊的纹理(瑕疵)能够有很好的保留,比起其他的平滑滤波算法有一定的优势。

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from scipy import ndimage


cov_len = 23 # 尽量选取比较大的卷积核
img = Image.open("20180706120408263.jpg", 'r')
img = img.convert('L')
avg_img = []
for i in range(19): #循环次数不限,尽量不要太多
    px = np.random.randint(0, 256 - cov_len)
    py = np.random.randint(0, 256 - cov_len)
    rect = (px, py, px + cov_len, py + cov_len)
    cut_img = img.crop(rect)
    avg_img.append(np.array(cut_img).reshape(-1))
avg_img = np.array(avg_img).mean(axis=0).reshape(cov_len, cov_len)

avg_img = avg_img / avg_img.sum() # 加权平均

i = ndimage.convolve(img, avg_img)
img_result = Image.fromarray(i)
img_result.save('6.png')
plt.imshow(img_result, cmap='gray')
plt.show()

卷积前:

卷积后:

查找直线:

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值