基于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。

代码实现

基于Python的图像拉普拉斯变化/图像锐化实现_第1张图片原始图片
基于Python的图像拉普拉斯变化/图像锐化实现_第2张图片灰度后的雷娜
基于Python的图像拉普拉斯变化/图像锐化实现_第3张图片拉普拉斯变化后的雷娜
基于Python的图像拉普拉斯变化/图像锐化实现_第4张图片锐化后的雷娜

你可能感兴趣的:(基于Python的图像拉普拉斯变化/图像锐化实现)