空间域:均值滤波与阈值处理

空间域:均值滤波与阈值处理

代码实现:

import cv2
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import rcParams

rcParams['font.family'] = 'simhei'


path = r"图片位置"

#读取图片,以灰度级的形式
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)

print(img)


from matplotlib import pyplot as plt

plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) 
plt.show()

#生成均值滤波器
n = int(input("请输入均值滤波:"))
b_one = np.ones((n,n))
print(b_one)

#给图像矩阵增加行列,扩充
b_zero = np.zeros((n-1+img.shape[0],n-1+img.shape[1]))
print(b_zero)
print(img.shape)
print(b_zero.shape)
for i in range(int((n-1)/2),int((n-1)/2)+img.shape[0]):
    for j in range(int((n-1)/2),int((n-1)/2)+img.shape[1]):
        b_zero[i][j] = img[i-int((n-1)/2)][j-int((n-1)/2)]
print(b_zero)
b_zero1 = b_zero

plt.imshow(b_zero, cmap = 'gray', interpolation = 'bicubic')
plt.title("扩充后")
plt.xticks([]), plt.yticks([]) 
plt.show()

def lvbo(img,i,j,b_one):
    b_row ,b_col = b_one.shape[0],b_one.shape[1]
    sun = 0
    z = 0 #滤波器行索引
    for li in range(i-int((b_row-1)/2),i+int((b_row-1)/2)+1):
        k = 0 #滤波器列索引
        for lj in range(j-int((b_col-1)/2),j+int((b_col-1)/2)+1):
            sun = sun + img[li][lj]*b_one[z][k]
            k = k + 1
        z = z + 1
    return sun/(b_row*b_col)

#对每一个元素进行滤波,调用滤波函数
for i in range(int((n-1)/2),int((n-1)/2)+img.shape[0]):
    for j in range(int((n-1)/2),int((n-1)/2)+img.shape[1]):
        b_zero[i][j] = lvbo(b_zero1,i,j,b_one)

plt.imshow(b_zero, cmap = 'gray', interpolation = 'bicubic')
plt.title("滤波后")
plt.xticks([]), plt.yticks([]) 
plt.show()

#阈值处理
b_max = max(max(row) for row in b_zero)
print("最大值为:%d"%(b_max))

#阈值t
b_t = 0.25*b_max
print("阈值为:%d"%(b_t))

img = b_zero[int((n-1)/2):int((n-1)/2)+img.shape[0],int((n-1)/2):int((n-1)/2)+img.shape[1]]
for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if img[i][j]<b_t:
            img[i][j] = 0
        else:
            img[i][j] = 255
print(img.shape)

plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.title("阈值处理后")
plt.xticks([]), plt.yticks([]) 
plt.show()

原始图片:
原始图片
扩充后的图片,会发现比原始图片多了一圈黑色:
扩充后
滤波后:

滤波后
阈值处理后:
阈值处理后

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为啥全要学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值