基于Python的图像拉普拉斯变化/图像锐化实现
博主本学习选修数字图像处理课程,用到的教材是冈萨雷斯的《数字图像处理》,作业要求完成图像拉普拉斯变化,虽然用Matalb比较容易就能实现,但还是想尝试用python完成。
Python+OpenCV拉普拉斯图像锐化这一篇博客是我实现代码的基础,但博主给出的代码有一部分错不,到后期无法实现拉普拉斯变化,而且灰度图像比较繁琐,因此做了一部分的改进。
原理参考
代码实现
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 18 20:47:35 2019
@author: hy
"""
import numpy as np
import cv2
from PIL import Image
from matplotlib import pyplot as plt
ori = Image.open(r'C:\Users\hy\Desktop\iml\leina.jpg')
ori_gray = ori.convert('L')
ori = np.array(ori)
ori_gray = np.array(ori_gray )
weight = ori.shape[0]
height = ori.shape[1]
ori_pad = np.pad(ori_gray,((1,1),(1,1)),'edge')
t1 = np.array([[0,1,0],[1,-4,1],[0,1,0]])
img = np.zeros((weight,height))
for i in range(weight-2):
for j in range(height-2):
img[i,j]=np.sum(ori_pad[i:i+3,j:j+3]*t1)
if img[i,j] < 0:
img[i,j] = 0
img_sharp = np.zeros((weight,height))
img_sharp = ori_gray - img
其中阻挡我很久的部分在于这里:
img = np.zeros((weight,height))
for i in range(weight-2):
for j in range(height-2):
img[i,j]=np.sum(ori_pad[i:i+3,j:j+3]*t1)
if img[i,j] < 0:
img[i,j] = 0
参考博客中用 img = np.zeros((weight,height),np.uint8),导致最后计算出来的负数全部转化为8位形式,而实际上拉普拉斯算子中,负数像元全部转为0。
代码实现
原始图片
灰度后的雷娜
拉普拉斯变化后的雷娜
锐化后的雷娜