[Python]图像处理——图像增强

原图:
[Python]图像处理——图像增强_第1张图片
处理思路:
[Python]图像处理——图像增强_第2张图片
具体实现:将原图进行拉普拉斯变换后,与原图的索菲尔算子边缘检测+平滑后进行相乘,获得到的新的矩阵再进行与原图进行矩阵点代表的元素进行相加,获得到的矩阵经过GAMMA变换后,得到输出。

编写程序如下:

from PIL import Image
import matplotlib.pyplot as plt # plt 用于显示图片
import numpy as np

im = Image.open('001.tif') #读取图片
# im.show()
im = im.convert('L')#convert转化mode,此处转化为灰度图
img = np.array(im)
[m,n]=img.shape
#建立等大小空矩阵

#laplacian enhanced
img1 = np.zeros((m,n))

for i in range(1,m-1):
    for j in range(1,n-1):
        for x in range(-1,2):
            for y in range(-1,2):
                img1[i,j] = img[i+x,j+y] + img1[i,j]
        img1[i,j] = img1[i,j] - 9*img[i,j]

#sobel gradient
img21 = np.zeros((m,n))
list21 = [-1,-2,-1,0,0,0,1,2,1]
for i in range(1,m-1):
    for j in range(1,n-1):
        mm = 0
        for x in range(-1,2):
            for y in range(-1,2):
                img21[i,j] = (img[i+x,j+y])*list21[mm] + img21[i,j]
                mm = mm + 1

img22 = np.zeros((m,n))
list22 = [-1,0,1,-2,0,2,-1,0,1]
for i in range(1,m-1):
    for j in range(1,n-1):
        mm = 0
        for x in range(-1,2):
            for y in range(-1,2):
                img22[i,j] = (img[i+x,j+y])*list22[mm] + img22[i,j]
                mm = mm + 1
        
img2 = np.zeros((m,n))
for i in range(0,m-1):
    for j in range(0,n-1):
        img2[i,j] = ((img21[i,j] ** 2)+(img22[i,j] **2)) ** 0.5

#boxfilter smoothed
img3 = np.zeros((m,n))
list3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
for i in range(2,m-2):
    for j in range(2,n-2):
        for x in range(-2,3):
            for y in range(-2,3):
                img3[i,j] = img2[i+x,j+y] + img3[i,j]
        img3[i,j] = img3[i,j] / 25

#sharpened
img4 = np.zeros((m,n))
img4 = img1 * img3

#sharpen enhanced
img5 = np.zeros((m,n))
img5 = img + img4
        
#poewer_law
img6 = np.power(img/float(np.max(img5)), 0.5)#np.power是次幂运算

img1 = Image.fromarray(img1) #data矩阵转化为二维图片
img2 = Image.fromarray(img2) #data矩阵转化为二维图片
img3 = Image.fromarray(img3) #data矩阵转化为二维图片
img4 = Image.fromarray(img4) #data矩阵转化为二维图片
img5 = Image.fromarray(img5) #data矩阵转化为二维图片
img6 = Image.fromarray(img6) #data矩阵转化为二维图片

#画图展示
plt.figure()

plt.subplot(2,3,1)
plt.imshow(img,cmap='gray')
plt.title('Original image')
plt.axis('off') # 不显示坐标轴

plt.subplot(2,3,2)
plt.imshow(img1,cmap='gray')
plt.title('Laplacian enhanced')
plt.axis('off') # 不显示坐标轴

plt.subplot(2,3,3)
plt.imshow(img3,cmap='gray')
plt.title('Sobel gradient and boxfilter smoothed')
plt.axis('off') # 不显示坐标轴

plt.subplot(2,3,4)
plt.imshow(img4,cmap='gray')
plt.title('Sharpened')
plt.axis('off') # 不显示坐标轴

plt.subplot(2,3,5)
plt.imshow(img5,cmap='gray')
plt.title('Sharpen enhanced')
plt.axis('off') # 不显示坐标轴

plt.subplot(2,3,6)
plt.imshow(img6,cmap='gray')
plt.title('Poewer_law')
plt.axis('off') # 不显示坐标轴

plt.show()

结果处理后:
[Python]图像处理——图像增强_第3张图片

你可能感兴趣的:(python,图像处理)