运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

数字图像处理——拉普拉斯算子【像素级别处理】(python)

运维开发网 https://www.qedev.com 2021-04-14 08:55 出处:51CTO 作者:谁唱江南断肠句
数字图像处理——拉普拉斯算子【像素级别处理】(python)文章目录数字图像处理——拉普拉斯算子【像素级别处理】(python)简介:代码实现简介:拉普拉斯算子是一种微分算子常在图像处理中强调灰度值的突变,不强调灰度变换缓慢的地方,得到的图层与原图像叠加在一起可以得到锐化的效果一个二维图像的拉普拉斯算子可以定义为∇2f=∂2f∂x2+∂2f∂y2\nabla^{2}f=\frac{\par...

数字图像处理——拉普拉斯算子【像素级别处理】(python)

文章目录

  • 数字图像处理——拉普拉斯算子【像素级别处理】(python)
    • 简介:
    • 代码实现

简介:

拉普拉斯算子是一种微分算子常在图像处理中强调灰度值的突变,不强调灰度变换缓慢的地方,得到的图层与原图像叠加在一起可以得到锐化的效果

一个二维图像的拉普拉斯算子可以定义为                                      ∇                          2                                 f                         =                                                        ∂                                2                                         f                                               ∂                                          x                                2                                                     +                                                        ∂                                2                                         f                                               ∂                                          y                                2                                                        \nabla^{2}f=\frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2}                 ∇2f=∂x2∂2f+∂y2∂2f

所以:

在X方向上存在                                                            ∂                                2                                         f                                               ∂                               x                                           =                         f                         (                         x                         +                         1                         ,                         y                         )                         +                         f                         (                         x                         −                         1                         ,                         y                         )                         −                         2                         f                         (                         x                         ,                         y                         )                            \frac{\partial^2 f}{\partial x}=f(x+1,y)+f(x-1,y)-2f(x,y)                 ∂x∂2f=f(x+1,y)+f(x−1,y)−2f(x,y)

在Y方向上存在                                                            ∂                                2                                         f                                               ∂                               y                                           =                         f                         (                         x                         ,                         y                         +                         1                         )                         +                         f                         (                         x                         ,                         y                         −                         1                         )                         −                         2                         f                         (                         x                         ,                         y                         )                            \frac{\partial^2 f}{\partial y}=f(x,y+1)+f(x,y-1)-2f(x,y)                 ∂y∂2f=f(x,y+1)+f(x,y−1)−2f(x,y)

可得:

                                     ∇                          2                                 f                         =                         f                         (                         x                         +                         1                         ,                         y                         )                         +                         f                         (                         x                         −                         1                         ,                         y                         )                         +                         f                         (                         x                         ,                         y                         +                         1                         )                         +                         f                         (                         x                         ,                         y                         −                         1                         )                         −                         4                         f                         (                         x                         ,                         y                         )                            \nabla^2f=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)                 ∇2f=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)

扩展至对角线:

                                     ∇                          2                                 f                         =                         f                         (                         x                         +                         1                         ,                         y                         )                         +                         f                         (                         x                         −                         1                         ,                         y                         )                         +                         f                         (                         x                         ,                         y                         +                         1                         )                         +                         f                         (                         x                         ,                         y                         −                         1                         )                         +                         f                         (                         x                         −                         1                         ,                         y                         −                         1                         )                         +                         f                         (                         x                         −                         1                         ,                         y                         +                         1                         )                         +                         f                         (                         x                         +                         1                         ,                         y                         −                         1                         )                         +                         f                         (                         x                         +                         1                         ,                         y                         +                         1                         )                         −                         8                         f                         (                         x                         ,                         y                         )                            \nabla^2f=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)+f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)-8f(x,y)                 ∇2f=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)+f(x−1,y−1)+f(x−1,y+1)+f(x+1,y−1)+f(x+1,y+1)−8f(x,y)

代码实现

import cv2import numpy as npimport matplotlib.pyplot as plt

img = cv2.imread('Fig0338.tif')  # 测试图片H = img.shape[0]W = img.shape[1]pixa = np.zeros((H, W), np.int32)mImgae = np.zeros((H, W, 3), np.uint8)  # 标定(scale)前的滤波图像smImga = np.zeros((H, W, 3), np.uint8)  # 标定(scale)后的滤波图像pixb = np.zeros((H, W), np.int32)mImgbe = np.zeros((H, W, 3), np.uint8)  # 标定前的滤波图像smImgb = np.zeros((H, W, 3), np.uint8)  # 标定后的滤波图像imga = np.zeros((H, W, 3), np.uint8)  # xy方向模板滤波后图像imgb = np.zeros((H, W, 3), np.uint8)  # 加上对角方向模板滤波后图像# a用到的算子是        b用到的算子是# 0  1  0            1  1  1# 1 -4  1            1 -8  1# 0  1  0            1  1  1# 先绘制标定滤波图像# 标定指的是最小值设置为0,最大值设置为255的进行归一化的结果for i in range(1, H - 1):for j in range(1, W - 1):pixa[i, j] = int(img[i - 1, j, 0]) + img[i + 1, j, 0] + img[i, j - 1, 0] + img[i, j + 1, 0] - 4 * int(img[i, j, 0])pixb[i, j] = int(img[i - 1, j - 1, 0]) + img[i - 1, j, 0] + img[i - 1, j + 1, 0] + img[i, j - 1, 0] + img[i, j + 1, 0] + img[i + 1, j - 1, 0] + img[i + 1, j, 0] + img[i + 1, j + 1, 0] - 8 * int(img[i, j, 0])maxa = 0maxb = 0mina = 255minb = 255for i in range(H):for j in range(W):# 求出像素最大值和最小值,以利于scaleif pixa[i, j] > maxa:maxa = pixa[i, j]if pixa[i, j] < mina:mina = pixa[i, j]if pixb[i, j] > maxb:maxb = pixb[i, j]if pixb[i, j] < minb:minb = pixb[i, j]if pixa[i, j] < 0:mImgae[i, j] = [0, 0, 0]else:mImgae[i, j, 0] = pixa[i, j]mImgae[i, j, 1] = pixa[i, j]mImgae[i, j, 2] = pixa[i, j]if pixb[i, j] < 0:mImgbe[i, j] = [0, 0, 0]else:mImgbe[i, j, 0] = pixb[i, j]mImgbe[i, j, 1] = pixb[i, j]mImgbe[i, j, 2] = pixb[i, j]ka = 0kb = 0if maxa > mina:ka = 255 / (maxa - mina)if maxb > minb:kb = 255 / (maxb - minb)# scale处理for i in range(H):for j in range(W):smImga[i, j, 0] = (pixa[i, j] - mina) * ka
        smImga[i, j, 1] = smImga[i, j, 0]smImga[i, j, 2] = smImga[i, j, 0]smImgb[i, j, 0] = (pixb[i, j] - minb) * kb
        smImgb[i, j, 1] = smImgb[i, j, 0]smImgb[i, j, 2] = smImgb[i, j, 0]# 加上拉普拉斯算子# pixa和pixb里面就是两个算子的结果# lapa和lapb是原图加算子的结果,用来裁剪或者scale的原始数据lapa = np.zeros((H, W), np.int32)lapb = np.zeros((H, W), np.int32)# 缩放处理# maxa = 0# maxb = 0# mina = 255# minb = 255for i in range(H):for j in range(W):lapa[i, j] = img[i, j, 0] - pixa[i, j]lapb[i, j] = img[i, j, 0] - pixb[i, j]# 裁剪处理if lapa[i, j] > 255:lapa[i, j] = 255if lapa[i, j] < 0:lapa[i, j] = 0if lapb[i, j] > 255:lapb[i, j] = 255if lapb[i, j] < 0:lapb[i, j] = 0# 缩放处理# if lapa[i, j] > maxa:#     maxa = lapa[i, j]# if lapa[i, j] < mina:#     mina = lapa[i, j]# if lapb[i, j] > maxb:#     maxb = lapb[i, j]# if lapb[i, j] < minb:#     minb = lapb[i, j]# 缩放处理# ka = 0# kb = 0# if maxa > mina:#     ka = 255 / maxa# if maxb > minb:#     kb = 255 / maxb# scale处理for i in range(H):for j in range(W):# 裁剪处理imga[i, j, 0] = lapa[i, j]imga[i, j, 1] = lapa[i, j]imga[i, j, 2] = lapa[i, j]imgb[i, j, 0] = lapb[i, j]imgb[i, j, 1] = lapb[i, j]imgb[i, j, 2] = lapb[i, j]# 缩放处理# if lapa[i, j] > 0:#     imga[i, j, 0] = lapa[i, j] * ka# else:#     imga[i, j, 0] = 0# imga[i, j, 1] = imga[i, j, 0]# imga[i, j, 2] = imga[i, j, 0]# if lapb[i, j] > 0:#     imgb[i, j, 0] = lapb[i, j] * kb# else:#     imgb[i, j, 0] = 0# imgb[i, j, 1] = imgb[i, j, 0]# imgb[i, j, 2] = imgb[i, j, 0]# 原图plt.subplot(1, 4, 1)plt.axis('off')plt.title('Original image')plt.imshow(img)# 图3.37a的模板plt.subplot(2, 4, 2)plt.axis('off')plt.title('Before sale a')plt.imshow(mImgae)# scale后图3.37a的模板plt.subplot(2, 4, 3)plt.axis('off')plt.title('After sale a')plt.imshow(smImga)# 图3.37a的模板锐化后的图像plt.subplot(2, 4, 4)plt.axis('off')plt.title('Sharpened Image a')plt.imshow(imga)# 图3.37b的模板plt.subplot(2, 4, 6)plt.axis('off')plt.title('Before sale b')plt.imshow(mImgbe)# scale后图3.37b的模板plt.subplot(2, 4, 7)plt.axis('off')plt.title('After sale b')plt.imshow(smImgb)# 图3.37b的模板锐化后的图像plt.subplot(2, 4, 8)plt.axis('off')plt.title('Sharpened Image b')plt.imshow(imgb)plt.show()

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号