IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 学习笔记—使用Python运用Sobel算子,Laplacian算子和高通滤波算子对图像进行锐化 -> 正文阅读

[人工智能]学习笔记—使用Python运用Sobel算子,Laplacian算子和高通滤波算子对图像进行锐化

import cv2 as cv
from pylab import *
import matplotlib.pyplot as plt
import random
from scipy import ndimage
import numpy
# .......................................................................................
# ..................................我是分界线.............................................
# .......................................................................................
def LaplaceOperator(roi):
    laplace_operator = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
    result = np.abs(np.sum(roi * laplace_operator))  # 3阶矩阵相乘并求和取绝对值
    return result

def LaplaceAlogrithm(image):
    new_image = np.zeros(image.shape)                                # 返回来一个给定形状和类型的用0填充的数组,用于储存新图像
    image = cv.copyMakeBorder(image, 1, 1, 1, 1, cv.BORDER_DEFAULT)  # 为图片设置边界框
    # image.shape[0]图片垂直尺寸;image.shape[1]图片水平尺寸;image.shape[2]图片通道数
    for i in range(1, image.shape[0] - 1):
        for j in range(1, image.shape[1] - 1):
            new_image[i - 1, j - 1] = LaplaceOperator(image[i - 1:i + 2, j - 1:j + 2])
    # 上面这个for循环 是 拿出3x3的图像像素与卷积核相乘,然后存放到个新的数组中
    new_image = new_image * (255 / np.max(image))  # 防止有灰度值超过255这个数值
    return new_image.astype(np.uint8)              # 转换数组的数据类型
# .......................................................................................
# ..................................我是分界线.............................................
# .......................................................................................
def pepper_and_salt(img,percentage):
    num=int(percentage*img.shape[0]*img.shape[1])#  椒盐噪声点数量
    random.randint(0, img.shape[0])
    img2=img.copy()
    for i in range(num):
        X=random.randint( 0,img2.shape[0]-1)  #从0到图像长度之间的一个随机整数,因为是闭区间所以-1
        Y=random.randint( 0,img2.shape[1]-1)
        if random.randint(0,1) ==0:          #黑白色概率55开
            img2[X,Y] = (255,255,255)        #白色
        else:
            img2[X,Y] =(0,0,0)#黑色
    return img2
# ..................................我是分界线.............................................

if __name__ == '__main__':

       plt.ion()     #人机交互界面启动
       # 读取图片

       img = cv.imread("g11.tif")
       # 使用3*3的Sobel算子进行图像锐化
       x = cv.Sobel(img, cv.CV_16S, 1, 0)  # 1,0表示计算X方向的导数
       y = cv.Sobel(img, cv.CV_16S, 0, 1)  # 1,0表示计算Y方向的导数
       #cv.CV_16S表示图像深度,这是为了防止溢出,当输入图像是8位的,要求输出图像是16位的

       absX = cv.convertScaleAbs(x)                   # 转回uint8
       absX = cv.addWeighted(absX, 0.5, img, 0.5, 0)  # 将原图与sobel算法(X轴求导)处理过的图片结果相加
       absY = cv.convertScaleAbs(y)                   # 转回uint8
       absY = cv.addWeighted(absY, 0.5, img, 0.5, 0)  # 将原图与sobel算法(Y轴求导)处理过的图片结果相加
       dst  = cv.addWeighted(absX, 0.5, img, 0.5, 0)  # 将sobel算法(对X求导)(对Y求导)处理过的图片相加
       dst  = cv.addWeighted(dst , 0.5, img, 0.5, 0)  # 将原图和上一段代码生成的图片相加
       htitch = np.hstack((absX,absY,dst))            # 合并3张图片
       cv.imshow("absX-absY-dst", htitch)             # 图片显示
       cv.waitKey(0)
       cv.destroyAllWindows()

       # 使用3*3的Laplacian算子进行图像锐化
       img = cv.imread("g13.tif")         # 导入图片
       plt.subplot()                      # 生成一个用于图片显示的窗口
       plt.title("Laplacian")             # 标题
       plt.imshow(LaplaceAlogrithm(img))  # 对图像调用函数先进行拉普拉斯变换后显示
       plt.pause(3)                       # 延时三秒
       plt.close()                        # 清空窗口
       dst = cv.addWeighted(LaplaceAlogrithm(img), 0.5, img, 0.5, 0)  # 将原图和拉普拉斯变换生成的图片相加
       cv.imshow("over", dst)                                         # 图片显示
       cv.waitKey(5000)                                               # 图片显示延时5000帧

       # 使用3*3的高通滤波算子进行图像锐化
       img = cv.imread("g14.tif")                                # 导入图片
       kernel = np.array([[0, -2, 0], [-2, 9, -2], [0, -2, 0]])  # 生成二维梯度模板矩阵
       gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)                # 将图片变为CV格式的灰度图,我这不加这句话会报错
       G14 = cv.filter2D(gray,-1,kernel)                         # gray表示输入图像;-1表示目标图像和原图像深度保持一致;kernel为卷积核
       dst = cv.addWeighted(gray, 0.5, G14, 0.5, 0)              # 将高通滤波后的图与原图叠加
       cv.imshow("gaotong", G14)                                 # 显示高通滤波后的图片
       cv.imshow("over", dst)                                    # 显示叠加后的图
       cv.waitKey()




  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:41:05  更:2021-09-22 14:42:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 23:27:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码