改进的canny算法

基于改进Canny算法的边缘检测技术应用及发展趋势 Canny算法是边缘检测中常用的算法之一,Canny算法经过有效改进,可快速、高效地完成对图像边缘位置的准确识别,因此在计算机视觉、图像分析等领域发挥着较为重要的作用。基于边缘检测的概念及过程,着重介绍了Canny算法的各种改进方法,根据不同的改进方式对Canny算法进行分类与总结,并对改进前后的边缘提取结果进行了对比分析;阐述了改进Canny算法的应用与发展前景,总结了目前所面临的问题以及进一步的研究内容。应在降低算法的时间复杂度、提高算法的检测精度方面开展进一步的研究工作。该方法能够有效检测出弱边缘。 阅读详情
import pic_process as pre
img = plt.imread('many.jpg')


image=img.copy()
sigma1 = sigma2 = 1
sum = 0

gaussian = np.zeros([5, 5])
for i in range(5):
    for j in range(5):
        gaussian[i, j] = math.exp(-1 / 2 * (np.square(i - 3) / np.square(sigma1)  # 生成二维高斯分布矩阵
                                            + (np.square(j - 3) / np.square(sigma2)))) / (2 * math.pi * sigma1 * sigma2)
        sum = sum + gaussian[i, j]

gaussian = gaussian / sum


# print(gaussian)

def rgb2gray(rgb):
    return np.dot(rgb[..., :3], [0.299, 0.587, 0.114])


# step1.高斯滤波
#gray = rgb2gray(img)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#gray = cv2.equalizeHist(gray)
W, H = gray.shape
new_gray = np.zeros([W - 5, H - 5])
for i in range(W - 5):
    for j in range(H - 5):
        gray[i, j] = np.sum(gray[i:i + 5, j:j + 5] * gaussian)  # 与高斯矩阵卷积实现滤波
W, H = gray.shape
new_gray = np.zeros([W - 5, H - 5])
for i in range(W - 5):
    for j in range(H - 5):
        new_gray[i, j] = np.sum(gray[i:i + 5, j:j + 5] * gaussian)  # 与高斯矩阵卷积实现滤波

# plt.imshow(new_gray, cmap="gray")


# step2.增强 通过求梯度幅值
W1, H1 = new_gray.shape
dx = np.zeros([W1 - 1, H1 - 1])
dy = np.zeros([W1 - 1, H1 - 1])
dx2 = np.zeros([W1 - 1, H1 - 1])
dy2 = np.zeros([W1 - 1, H1 - 1])
d = np.zeros([W1 - 1, H1 - 1])
for i in range(W1 - 1):
    for j in range(H1 - 1):
        # dx[i, j] = (2*new_gray[i, j + 1] - 2*new_gray[i, j-1] + gray[i -1, j + 1] - gray[i -1, j-1]
        #             +new_gray[i+1, j + 1] - new_gray[i+1, j-1])
        # dy[i, j] = (2*new_gray[i+1, j ] - 2*new_gray[i-1, j] + gray[i +1, j +1] - gray[i -1, j+1]
        #             +new_gray[i+1, j -1] - new_gray[i-1, j-1])
        # dx[i, j] = new_gray[i, j + 1] - new_gray[i, j]
        # dy[i, j] = new_gray[i + 1, j] - new_gray[i, j]
        dx[i, j] = new_gray[i, j + 1] - new_gray[i, j]+new_gray[i+1, j + 1] - new_gray[i+1, j]
        dy[i, j] = new_gray[i + 1, j] - new_gray[i, j]+new_gray[i+1, j + 1] - new_gray[i, j+1]
        #
        # dx2[i, j] = new_gray[i+1, j + 1] - new_gray[i, j]
        # dy2[i, j] = new_gray[i -1, j+1] - new_gray[i, j]

        # dx[i, j] = new_gray[i, j + 1] -2* new_gray[i, j]+new_gray[i, j - 1]
        # dy[i, j] = new_gray[i + 1, j] - 2*new_gray[i, j]+new_gray[i - 1, j]
        d[i, j] = np.sqrt(np.square(dx[i, j]) + np.square(dy[i, j]))  # 图像梯度幅值作为图像强度值
        #d[i, j] = np.sqrt(np.square(dx[i, j]) + np.square(dy[i, j])+np.square(dx2[i, j]) + np.square(dy2[i, j]))  # 图像梯度幅值作为图像强度值

# plt.imshow(d, cmap="gray")


# setp3.非极大值抑制 NMS
W2, H2 = d.shape
NMS = np.copy(d)
NMS[0, :] = NMS[W2 - 1, :] = NMS[:, 0] = NMS[:, H2 - 1] = 0
p=0.5
for i in range(1, W2 - 1):
    for j in range(1, H2 - 1):

        if d[i, j] == 0:
            NMS[i, j] = 0
        else:
            gradX = dx[i, j]
            gradY = dy[i, j]
            gradTemp = d[i, j]

            # 如果Y方向幅度值较大
            if np.abs(gradY) > np.abs(gradX):
                weight = np.abs(gradX) / np.abs(gradY)
                grad2 = d[i,j]+p*(d[i-1,j]-d[i,j])
                grad4 = d[i, j] + p * (d[i + 1, j] - d[i, j])
                # 如果x,y方向梯度符号相同
                if gradX * gradY > 0:

                    grad1 = d[i,j-1]+p*(d[i-1,j-1]-d[i,j-1])
                    grad3 = d[i, j + 1] + p * (d[i + 1, j + 1] - d[i, j + 1])

                # 如果x,y方向梯度符号相反
                else:

                    grad1 = d[i , j + 1]+p*(d[i-1,j+1]-d[i , j + 1])
                    grad3 = d[i , j - 1]+p*(d[i+1,j-1]-d[i , j - 1])


            # 如果X方向幅度值较大
            else:
                weight = np.abs(gradY) / np.abs(gradX)
                grad2 = d[i , j ]+p*(d[i,j-1]-d[i , j ])
                grad4 = d[i , j ]+p*(d[i,j+1]-d[i , j ])
                # 如果x,y方向梯度符号相同
                if gradX * gradY > 0:
                    grad1 = d[i+1,j]+p*(d[i - 1, j + 1]-d[i+1,j])
                    grad3 = d[i-1,j]+p*(d[i - 1, j + 1]-d[i-1,j])
                # 如果x,y方向梯度符号相反
                else:
                    grad1 = d[i-1,j]+p*(d[i - 1, j - 1]-d[i-1,j])
                    grad3 = d[i+1,j]+p*(d[i + 1, j + 1]-d[i+1,j])

            gradTemp1 = weight *p* grad1 + (1 - weight*p) * grad2
            gradTemp2 = weight *p* grad3 + (1 - weight*p) * grad4
            if gradTemp >= gradTemp1 and gradTemp >= gradTemp2:
                NMS[i, j] = gradTemp
            else:
                NMS[i, j] = 0

# plt.imshow(NMS, cmap = "gray")
#hist = cv2.calcHist([NMS],[0],None,[256],[0,256])
#util.image_read(NMS)

arr=NMS.flatten()
arrs=[]
for i in arr:
    if i!=0 and i!=255:
        arrs.append(i)
#arrs=arr

print("hk",NMS.shape)


n, bins, patches = plt.hist(arrs, bins=256, normed=1, facecolor='green', alpha=0.75)
a,b=pre.OTSU(arrs)
print(a,"  ",b)
plt.show()
#print(arr)

# step4. 双阈值算法检测、连接边缘
W3, H3 = NMS.shape
DT = np.zeros([W3, H3])
# 定义高低阈值
TL = 0.15 * np.max(NMS)
TH = 0.3* np.max(NMS)
print("THTH",TH)
TL=(2/3)*b
TH=b

for i in range(1, W3 - 1):
    for j in range(1, H3 - 1):
        if (NMS[i, j] < TL):
            DT[i, j] = 0
        elif (NMS[i, j] > TH):
            DT[i, j] = 255
        elif ((NMS[i - 1, j - 1:j + 1] < TH).any() or (NMS[i + 1, j - 1:j + 1]).any()
              or (NMS[i, [j - 1, j + 1]] < TH).any()):
            DT[i, j] = 255


#plt.imshow(DT, cmap="gray")
util.image_read("DT",DT)
cv2.imwrite("images/xkgslotus_jh_many.jpg",DT)
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import my_util as pre_gj
#import min_filter as min

def OTSU(arr):
    #hist = cv.calcHist([gray], [0], None, [256], [0, 256])  # 255*1的灰度直方图的数组
    gray_size = len(arr)  # 图像像素数
    k = 0  # 初始化灰度阈值
    best_k = 0  # 最佳阈值
    best_M = 0  # 衡量阈值性
    counts, bin_edges = np.histogram(arr, bins=int(max(arr)))
    p = []  # 灰度出现概率

    # for k in range(30,150):
    for i in range(len(counts)):
        p.insert(i, counts[i] / gray_size)  # 灰度集概率分布
    bb=int(max(arr))
    for k in range(0,int(max(arr))):
        u = 0  # 从1到k的累计出现概率的平均灰度级
        u_t = 0  # 从1到256的累计出现概率的平均灰度级
        σ2_0 = 0  # 类内方差
        σ2_1 = 0  # 类内方差
        σ2_t = 0  # 灰度级的总方差
        sum_0 = np.sum(counts[0:k + 1], axis=0)
        sum_1 = np.sum(counts[k + 1:bb], axis=0)

        w_0 = np.sum(p[0:k + 1:])
        w_1 = np.sum(p[k + 1:bb:])  # 各类的概率

        for i in range(k + 1):
            u = i * p[i] + u

        for i in range(len(counts)):
            u_t = i * p[i] + u_t

        u0 = u / w_0
        u1 = (u_t - u) / w_1  # 各类的平均灰度级

        for i in range(k + 1):
            σ2_0 = (p[i] / w_0) * np.square(i - u0) + σ2_0#背景
        for i in range(k + 1, bb):
            σ2_1 = (p[i] / w_1) * np.square(i - u1) + σ2_1  # 两类的类内方差,钢筋
        for i in range(bb):
            σ2_t = p[i] * np.square(i - u_t) + σ2_t  # 总方差

        σ2_w = w_0 * σ2_0 + w_1 * σ2_1  # 类内方差
        σ2_b = w_0 * w_1 * np.square(u1 - u0)  # 类间方差

        M = σ2_b / σ2_t  # 衡量阈值k的好坏
        if M > best_M:
            best_M = M;
            best_k = k;
    return best_M, best_k

from skimage import data, exposure, img_as_float

def get_image(path):
    # 获取图片
    img = cv.imread(path)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    return img, gray


def smothing(gray):
    #均衡化
    gray = exposure.adjust_gamma(gray, 0.8)
    img1 = cv.equalizeHist(gray)
    img1 = cv.equalizeHist(img1)
    aussian = cv.GaussianBlur(img1, (5, 5), 1)
    dst = cv.medianBlur(aussian, 5)

    #dst = cv.medianBlur(dst, 7)
#    dst=min.max_min_value_filter(dst,ksize=2,mode=2)
    #dst=min.fillHole(dst)
    """锐化"""
    #kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 锐化
    #dst = cv.filter2D(dst, -1, kernel=kernel)

    #blurred = cv2.GaussianBlur(gray, (3, 3), 0)

    return dst

def Thresh_and_blur(gray,gradient):
    #blurred = cv2.GaussianBlur(gradient, (5, 5), 0)
    #(_, thresh) = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY)
    #otsu
    M, k = OTSU(gradient)
    print(M, k)
    ret, thresh= cv.threshold(gray, k, 255, cv.THRESH_BINARY)


    return thresh

def image_morphology(thresh):
    # 建立一个椭圆核函数
    kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (3, 3))

    thresh = cv.dilate(thresh, kernel, iterations=1)

    closed = cv.erode(thresh, kernel, iterations=2)#腐蚀
    #closed = cv.morphologyEx(closed, cv.MORPH_ELLIPSE, kernel)

    opening = cv.morphologyEx(closed, cv.MORPH_OPEN, kernel)
    return closed

 

因为是第一个是代码片段是canny1.py  第二个代码片段为pic_process.py,调用的话先把两个代码片段分别复制到两个file里面,然后把图片路径改成自己的,运行就会自动保存到python所在路径。

参考文献:[1]李旭,王正勇,吴晓红,滕奇志.一种改进非极大值抑制的Canny边缘检测算法[J].成都信息工程学院学报,2011,26(05):564-569.

【毕业设计/Matlab系列】基于NSCT和改进Canny的图像边缘检测matlab实现【含Matlab源码】 在大学毕业设计的时候,实现了基于NSCT和改进Canny的图像边缘检测算法,采用Matlab语言实现,边缘提取效果不错,与经典的Canny和Sobel算子相比,可以在抑制噪声的同时提取有效边缘分量。需要相关代码可以在关注博主和订阅本专栏后加文章最后的QQ名片咨询博主。 阅读详情

相关推荐

基于改进Canny的彩色图像边缘检测算法

彩色图像边缘在计算机视觉中起着至关重要的作用,但现存的彩色图像边缘检测算法存在对混合噪声抵抗性差、检测出的边缘连续性差和边缘漏检等问题。通过对彩色图像边缘检测算法的研究,提出一种改进的彩色图像边缘检测算法。该算法首先采用改进小波变换滤波方法在保持图像边缘的同时滤除图像的混合噪声;然后将滤波处理后的彩色图像由RGB颜色空间转换到CLElab颜色空间,并用提出的多方向色差计算公式计算色差幅值和方向,以提高边缘检测的完整性;

weixin_70923796的博客 619

Python+Opencv实现无参数、全自动的Canny算法

目录一、什么是Canny边缘检测算法?二、最优边缘准则是什么?三、Canny算法实现步骤五、无参数、自动化Canny算法代码实现六、改进算法效果展示 一、什么是Canny边缘检测算法?   Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory of edge de...

WZZ18191171661的博客 9035

改进版Canny边缘检测算法源代码解析与实践

边缘检测是计算机视觉中的基础任务,它有助于识别图像中物体的轮廓和结构。Canny边缘检测算法因其高效性和准确性被广泛应用。该算法由John F. Canny于1986年提出,其目的是找到一种能够检测出最准确边缘的算法。Canny算法采用了一系列优化步骤,包括降噪、梯度计算、非极大值抑制、双阈值检测和边缘连接,从而实现对图像边缘的精确检测。图像检索是计算机视觉中的一个基本任务,其目的是能够在图像数据库中根据用户的需求找到相关的图像。这一过程涉及到图像内容的理解,包括图像的颜色、纹理、形状、对象的识别等。

weixin_33597080的博客 1627

OpenCV——Canny边缘检测(cv2.Canny())

Canny边缘检测 Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986 年,John F. Canny 发 表了著名的论文 A Computational Approach to Edge Detection,在该论文中详述了如何进行边缘 检测。 Canny()边缘检测步骤 Canny 边缘检测分为如下几个步骤: 步骤 1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。 步骤 2:计算梯度的幅度与方向。 步骤 3:非极大值抑制,即适当地让边缘“变瘦”。 步骤 4:确定边缘。使

m0_51402531的博客 12万+

基于自适应滤波的Canny边缘检测改进算法研究与实现

回顾这场技术旅程,你会发现 Canny 算法的伟大之处不仅在于其严密的数学推导,更在于它的模块化设计理念——每个步骤都可以独立优化升级。今天的改进版已经具备:- 自适应滤波 → 更聪明的去噪;- 多梯度融合 → 更全面的特征提取;- 动态阈值 → 更智能的决策机制。未来呢?完全可以融入深度学习先验,比如用注意力机制引导权重分配,或将 CNN 提取的高层语义反馈给低层边缘检测器,形成闭环优化系统。但这并不意味着我们要抛弃传统方法。相反,

weixin_35756892的博客 401

基于MATLAB的改进型Canny边缘检测算法设计与实现

边缘检测是图像处理与计算机视觉领域的基础性任务,旨在识别图像中亮度突变的像素点,从而提取物体轮廓与结构信息。其广泛应用于目标识别、自动驾驶、医学影像分析等领域。随着实时性与精度要求提升,传统算法面临噪声敏感与边缘断裂等问题,亟需优化与改进。Canny算法因其多准则平衡优势成为经典基准,后续章节将系统解析其原理与改进路径。在数字图像处理中,边缘是图像强度发生显著变化的位置,通常对应于物体边界、纹理突变或光照变化区域。

weixin_42514750的博客 466

基于双边滤波的改进型Canny算法边缘检测冠状动脉CT图像

在图像边缘检测领域,与传统边缘检测算法相比,Canny算法在解决抑制噪声与保留边缘上效果更好,但在保留边缘细节和减少伪边缘方面仍存在不足。针对这些问题,本文提出一种改进型Canny算子边缘检测算法,采用具有在去噪的同时保持边缘特性的双边滤波器代替高斯滤波器对图像平滑,并结合冠状动脉CT图像的特点,在传统Canny算法的非极大值抑制和阈值选取方面做出改进,增强其对冠状动脉CT图像处理的适应性。在MATLAB平台上与传统Canny算法边缘检测效果进行对比,实验结果表明,本文提出的方法在冠状动脉CT图像的边缘检测

芸兮的博客 6727

Canny算法的改进及其硬件的实现.

Canny算法的改进及其硬件的实现.传统的边缘检测算法是先对图像进行平滑,然后利用二维滤波器计算图像的梯度值。

改进Canny算法分析暨2021年11月13号笔记

最近迷上了图像边缘检测的研究,在这个机器学习横行的时代,还在专研图像处理的传统方法,可以说有那么点任性,哈哈。今天我们赏析一篇高引用的中文论文——《应用Otsu改进Canny算子的图像边缘检测方法》。 是的,这是一篇2014年发表于<计算机与数字工程>的论文,作者是顺德职业技术学院的张志强教授和中国科学院研究生院的宋海生教授,知网上引用次数高达48次。 也可以说这是一篇考古文(下次来个更老的),不过我坚信,没有最好的方法,只有最合适用的地方。废...

不枯石的学习笔记 5085

canny算子的一种改进算法

代码中提出了一种基于适应滤波器处理的canny算法,对图像的分割有很好的作用,特别是对带噪声的图像有很好的分割作用。

canny算子改进的图像边缘检测算法源代码

通过改进的双阈值函数得到了边缘图像-这在图像检索方面很有用

一些关于Canny边缘检测算法的改进

传统的Canny边缘检测算法是一种有效而又相对简单的算法,可以得到很好的结果(可以参考上一篇Canny边缘检测算法的实现)。但是Canny算法本身也有一些缺陷,可以有改进的地方。 1. Canny边缘检测第一步用高斯模糊来去掉噪声,但是同时也会平滑边缘,使得边缘信息减弱,有可能使得在后面的步骤中漏掉一些需要的边缘,特别是弱边缘和孤立的边缘,可能在双阀值和联通计算中被剔除。很自然地可以预见,如

deeplan_1994的博客 2万+

一种改进的Canny边缘检测算法

针对带噪声图像,提出了一种改进的Canny算子边缘检测算法。该算法用离散小波变换(DWT)分解和加权重构对图像进行平滑滤波,用Otsu阈值法(最大类间方差法) 求出最佳的滞后阈值,在3×3邻域求得梯度法。实验证明,该算法在较好地抑制噪声的同时保留了更多边缘,检测出的图像边缘更加准确和丰富。

改进canny算法 matlab,改进的canny Canny 算法包含许多可以调整的参数 联合开发网 - pudn.com...

改进的canny所属分类:图形图像处理开发工具:matlab文件大小:1KB下载次数:21上传日期:2018-05-11 10:05:01上 传 者:冰棒说明:Canny 算法包含许多可以调整的参数,它们将影响到算法的计算的时间与实效。高斯滤波器的大小:第一步所用的平滑滤波器将会直接影响 Canny 算法的结果。较小的滤波器产生的模糊效果也较少,这样就可以检测较小、变化明显的细线。较大的滤波器...

weixin_32737183的博客 756

SNAP实战:Sentinel-1 GRD数据从预处理到后向散射系数生成全流程解析

本文详细解析了Sentinel-1 GRD数据从预处理到后向散射系数生成的全流程,包括辐射定标、噪声处理、地形校正等关键步骤。通过SNAP软件实战操作,帮助用户掌握SAR影像处理技巧,提升数据质量与分析效率,适用于地表变化监测、灾害评估等应用场景。

weixin_29239661的博客 536

解决PubMed卡在“正在检查浏览器”页面的完整排查指南

DNS解析是将域名转换为IP地址的基础网络服务,其稳定性和准确性直接影响网站访问。当DNS服务器响应缓慢或返回异常结果时,可能导致客户端与服务器建立连接时出现偏差,从而触发网站的安全验证机制,例如Cloudflare等安全服务提供的浏览器环境检查。这一机制旨在防御恶意流量,但偶尔也会误拦截正常访问。在生物医学信息检索领域,PubMed作为核心文献数据库,其稳定访问对科研工作流至关重要。针对因DNS或本地缓存问题导致的‘正在检查浏览器’页面卡顿,通过刷新DNS缓存、更换为Google Public DNS或C

weixin_29597551的博客 3643

canny检测出的多个边缘合成一个_Canny边缘检测算法可以改进的地方做一些讨论...

传统的Canny边缘检测算法是一种有效而又相对简单的算法,可以得到很好的结果。但是Canny算法本身也有一些缺陷,可以有改进的地方。1. Canny边缘检测第一步用高斯模糊来去掉噪声,但是同时也会平滑边缘,使得边缘信息减弱,有可能使得在后面的步骤中漏掉一些需要的边缘,特别是弱边缘和孤立的边缘,可能在双阀值和联通计算中被剔除。很自然地可以预见,如果加大高斯模糊的半径,对噪声的平滑力度加大,但也会使得...

weixin_39578899的博客 223

【架构设计】DDD 到底解决了什么问题

DDD作为架构设计思想帮助微服务控制规模复杂度,那它是怎么做到的呢?第一章提出了架构的根本目是解决系统复杂度,并简要说明系统复杂度的六个来源及通用解法,为我们设计架构提供了清晰可执行的操作思路。

DreamSun的博客 1161

OpenCv入门(五)——改进边缘算法Canny

原理:通过图像信号函数的极大值来判定图像的边缘像素点。 最优边缘检测主要以下面三个参数为评判标准: 低错误率:标识出尽可能多的实际边缘以及减少噪声产生。 高定位性:表示出边缘要与图像中的实际边缘尽可能接近。 最小响应:图像的边缘标记具有唯一性,虚假响应边缘应该得到最大抑制。 (一)Canny的原理 检测步骤: 消除噪声 边缘检测的算法主要是基于图像强度的一阶和二阶微分操作,但导数通常对噪声很敏感,边缘检测算法常常需要根据图像源的数据进行预处理操作,因此必须采用滤波器来改善与噪声.

Alkaid2000的博客 6245

论文理解【LLM-Agent】——【SkillOpt】Executive Strategy for Self-Evolving Agent Skills

SkillOpt 将 agent skill 从人工或一次性 prompt artifact 转化为可验证、可控、可迁移的文本空间“可训练状态”,通过有界编辑、验证门控、拒绝编辑反馈和 slow/meta update,在不更新模型权重的情况下显著提升多类 agent 任务表现

佚失的诗篇 590

向华为学习——解读华为战略规划SP与业务计划BP流程【附全文阅读】

该方案针对大中型企业高管及战略团队,系统拆解华为SP(4-9月中长期规划)与BP(10-12月年度执行)双轨体系,形成"战略制定-业务设计-资源配置-绩效解码"闭环。SP侧重市场趋势分析、业务优先级与资源分配,BP细化KPI、预算及行动计划。通过价值树、战略解码等工具实现战略到部门/个人的目标分解,强化跨部门协同与过程管控。配套17份华为实战资料(包括战略管理、流程优化、销售组织建设等核心方法论),助力企业建立规范的战略执行体系,实现资源优化与绩效落地。

cdfunlove的博客 769

canny检测出的多个边缘合成一个_Canny边缘检测算法的一些改进

传统的Canny边缘检测算法是一种有效而又相对简单的算法,可以得到很好的结果(可以参考上一篇Canny边缘检测算法的实现)。但是Canny算法本身也有一些缺陷,可以有改进的地方。1. Canny边缘检测第一步用高斯模糊来去掉噪声,但是同时也会平滑边缘,使得边缘信息减弱,有可能使得在后面的步骤中漏掉一些需要的边缘,特别是弱边缘和孤立的边缘,可能在双阀值和联通计算中被剔除。很自然地可以预见,如果加大高...

weixin_39790686的博客 435

深度学习注意力机制新突破:YOLOv8结合SimAM无参数注意力模块,让目标检测更精准!

在计算机视觉领域,注意力机制已成为提升模型性能的关键技术。然而,传统的注意力模块如SENet、CBAM等往往引入大量额外参数,增加了模型的复杂度和计算负担。本文介绍一种创新的无参数注意力机制——SimAM(Simple Parameter-Free Attention Module),并将其成功应用于YOLOv8目标检测框架。SimAM基于神经科学理论,通过定义能量函数为特征图计算3D注意力权重,无需任何额外参数即可显著提升模型性能。本文详细阐述了SimAM的理论基础、实现原理,并提供了完整的YOLOv8集

YOLO 99
上一篇: 数据挖掘——Adaboost
下一篇: 计算机组成原理(1)
yebulk
博客等级 码龄8年 352粉丝 58原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值