DIP 数字图像处理2:探讨不同西格玛对LoG算法的影响


DIP 数字图像处理:探讨不同西格玛对LoG算法的影响

  • LoG:高斯函数的拉普拉斯变换;
  • 用于求图像边缘;
  • 结构元的大小应该是奇数保证有中心点;

1. 实验题目:

鉴于LoG算法在历史中的地位,进行较深入的实验研究探讨不同σ(西格玛)对LoG 算法的影响。
1)取σ =1.2然后求零交叉的结果;
2)取σ =2.8的然后求零交叉的结果;
3)讨论和结论:零交叉对σ的依赖性;

2. 实验环境:

win10 + Python3.7 + OpenCV4.1

3. 实验步骤:

3.1 将原始图片转为灰度图,高斯降噪;
3.2 构造LoG算子(根据sigma和kernel大小);
3.3 灰度图与LoG算子计算卷积;
3.4 找零交叉点,确定边缘;

4. 实验结果:

4.1 设置sigma = 1.2, kernel size = (9, 9)时,零交叉的结果如下:
在这里插入图片描述

4.2 设置sigma = 2.8, kernel size = (17, 17)时,零交叉的结果如下:
在这里插入图片描述

4.3 设置sigma = 5, kernel size = (31, 31)时,零交叉的结果如下:
在这里插入图片描述

4.4 设置sigma = 10, kernel size = (61, 61)时,零交叉的结果如下:
在这里插入图片描述

5. 实验结果分析:

5.1 从实验的效果可以看出,随着sigma的增大,得到的边缘尺度越来越大,边缘细节原来越不明显,显得更加粗略。
5.2 重点理解:二阶的交叉零点处的值,就是一阶的极大值,即边缘。二维高斯函数的拉普拉斯变换是二阶微分。

6. 所有程序代码:

#! -*- coding: utf-8 -*-
# py37
# 时间:2019年4月28日21:46:42
# DIP第三次作业:二阶微分增强作业(分析LoG算子)

import cv2
from scipy import signal
import numpy as np


def createLoGKernel(sigma, size):  # 创建核(结构元)
    """
    :param sigma: 浮点型 
    :param size: 整型,且为两个奇数
    :return: 矩阵,log算子
    """
    H, W = size
    r, c = np.mgrid[0:H:1, 0:W:1]
    r -= int((H-1)/2)
    c -= int((W-1)/2)
    sigma2 = pow(sigma, 2.0)
    norm2 = np.power(r, 2.0) + np.power(c, 2.0)

    LoGKernel = (norm2 / sigma2 - 2) * np.exp(- norm2 / (2 * sigma2))
    return LoGKernel


def LoG(image, sigma, size, _boundary="symm"):
    """
    :param image: 矩阵 灰度图
    :param sigma: 浮点型 sigma
    :param size: 整型 结构元
    :param _boundary: 字符串 提供给 scipy 卷积的边界扩充类型 ,scipy 中的“symm”, 和opecv中的对称那种效果完全相同。
    :return: 卷积后的矩阵(矩阵中有正有负)
    """
    loGkernel = createLoGKernel(sigma, size)
    img_conv_log = signal.convolve2d(image, loGkernel, 'same', boundary=_boundary)
    return img_conv_log


if __name__ == "__main__":
    fileName = "Chapter3_1.pgm"  # 作业图片
    image = cv2.imread(fileName)
    image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)  # 转成灰度图
    image = cv2.GaussianBlur(image, (5, 5), 0.05)  # 平滑去燥

    sigma = 1.2  # 调参
    size = int(6*sigma + 1)
    if size % 2 == 0:  # size  只能取奇数,保证有中心点
        size = size + 1
    print(size)
    img_con_log = LoG(image, sigma, (size, size), 'symm')

    # 找零交叉并二值化
    edge_binary = np.copy(img_con_log)
    edge_binary[edge_binary > 0] = 255
    edge_binary[edge_binary < 0] = 0
    edge_binary = edge_binary.astype(np.uint8)  # 数据类型转为整型

    # 显示边缘检测后的图片
    cv2.imshow("edge_binary", edge_binary)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print("THE END")

THE END

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的有限差分法实验报告用MATLAB中的有限差分法计算槽内电位;对比解析法和数值法的异同点;选取一点,绘制收敛曲线;总的三维电位图+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值