import cv2
import numpy as np
import random
from matplotlib import pyplot as plt
from numpy import *
def sp_noise(image,prob):
'''
添加椒盐噪声
prob:噪声比例
'''
output = np.zeros(image.shape,np.uint8)
thres = 1 - prob
for i in range(image.shape[0]):
for j in range(image.shape[1]):
rdn = random.random()
if rdn < prob:
output[i][j] = 0
elif rdn > thres:
output[i][j] = 255
else:
output[i][j] = image[i][j]
return output
def gasuss_noise(image, mean=0, var=0.001):
'''
添加高斯噪声
mean : 均值
var : 方差
'''
image = np.array(image/255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out*255)
return out
img = cv2.imread("newpic.bmp")
# 添加椒盐噪声,噪声比例为 0.02
out1 = sp_noise(img, prob=0.02)
# 添加高斯噪声,均值为0,方差为0.01
out2 = gasuss_noise(img, mean=0, var=0.01)
plt.subplot(1,2,1)
plt.title("jiaoyan")
plt.imshow(out1)
plt.subplot(1,2,2)
plt.title("gaosi")
plt.imshow(out2)
plt.show()
def MedianFilter(Imge,dim): #Image为待处理图像,dim为滤波器的大小dim*dim
im=array(Imge)
for i in range(int(dim/2), im.shape[0] - int(dim/2)):
for j in range(int(dim/2), im.shape[1] - int(dim/2)):
k=[]
for a in range(-int(dim/2), -int(dim/2)+dim):
for b in range(-int(dim/2), -int(dim/2)+dim):
k.append(Imge[i + a, j + b,0])
k.sort()
im[i,j,0]=k[int(dim*dim/2)]
im[i,j,1]=k[int(dim*dim/2)]
im[i,j,2]=k[int(dim*dim/2)]
return im
def MeanFilter(Imge,dim): #Image为待处理图像,dim为滤波器的大小dim*dim
im=array(Imge)
for i in range(int(dim/2), im.shape[0] - int(dim/2)):
for j in range(int(dim/2), im.shape[1] - int(dim/2)):
k=0
for a in range(-int(dim/2), -int(dim/2)+dim):
for b in range(-int(dim/2), -int(dim/2)+dim):
k+=Imge[i + a, j + b]/(dim*dim)
im[i, j] = k
return im
im3=MedianFilter(out1,3)
plt.title("jiaoyanzhongzhi")
plt.imshow(im3)
像这样类似的调用
锐化的函数块
Roberts
def robert_suanzi(img):
im=array(img)
r=img.shape[0]
c=img.shape[1]
r_sunnzi = [[0,-1],[1,0]]
for x in range(r):
for y in range(c):
if (y + 2 <= c) and (x + 2 <= r):
imgChild = img[x:x+2, y:y+2,0]
list_robert = r_sunnzi*imgChild
im[x, y] = 255-abs(list_robert.sum()) # 求和加绝对值
return im
im7=robert_suanzi(img)
plt.title("Roberts")
plt.imshow(im7)
sobel
def Sobel_suanzi(img):
im=array(img)
r=img.shape[0]
c=img.shape[1]
S_sunnzi = np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
for i in range(r-2):
for j in range(c-2):
im[i+1, j+1] = 255-abs((img[i:i+3, j:j+3] * S_sunnzi).sum())
print(im)
return im
im9=Sobel_suanzi(img)
plt.title("Sobel")
plt.imshow(im9)
laplacation
def Laplace_suanzi(img):
im=array(img)
r=img.shape[0]
c=img.shape[1]
L_sunnzi = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]])
for i in range(r-2):
for j in range(c-2):
im[i+1, j+1] = abs((img[i:i+3, j:j+3] * L_sunnzi).sum())
return im
im8=Laplace_suanzi(img)
plt.title("Lap")
plt.imshow(im8)
这个代码是用anaconda jupyter lab 跑的
我把jupyter 的ipynb也上传一下
添加链接描述