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

代码实现

原图原始图片
灰度后的雷娜灰度后的雷娜
拉普拉斯变化后的雷娜拉普拉斯变化后的雷娜
锐化后的雷娜锐化后的雷娜

  • 4
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值