一种新的图像去噪方式:图像修补+斑点检测的预处理

news2024/11/17 17:46:14

灵感来源于我之前写的一篇博客:图像处理:基于cv2.inpaint()图像修补。

这种方式可以有效的去除白色的噪点,这里我们需要一张噪点的图像,你可以用下面的代码随机生成一张噪点图片:

import cv2
import numpy as np
# import pyzjr

def addnoisy(image, n=2000):
    """
    :param image: 原始图像
    :param n: 添加椒盐的次数,默认为10000
    :return: 返回被椒盐处理后的图像
    """
    result = image.copy()
    w, h = image.shape[:2]
    for i in range(n):
        x = np.random.randint(0, w)
        y = np.random.randint(0, h)
        if np.random.randint(0, 1) == 0:
            result[x, y] = 255
    return result

img = cv2.imread("crack.jpg")
result = addnoisy(img)
cv2.imwrite("crack.png",result)

原图crack.jpg:

噪点图crack.png:

然后我们就可以用下面的代码进行处理了。 

import cv2
import numpy as np
from skimage.feature import blob_log
import matplotlib.pyplot as plt

image = cv2.imread(r"D:\PythonProject\net\High_tower\crack.png")
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

min_sigma = 1  # 斑点最小尺寸
max_sigma = 50  # 斑点最大尺寸
threshold = 0.1  # 斑点阈值,用于控制检测的灵敏度


blobs = blob_log(gray_image, min_sigma=min_sigma, max_sigma=max_sigma, threshold=threshold)

height, width = image.shape[:2]

black_image = np.zeros((height, width), dtype=np.uint8)

for blob in blobs:
    y, x, sigma = blob
    radius = int(sigma * np.sqrt(2))  # 半径是标准差乘以sqrt(2)

    cv2.circle(black_image, (int(x), int(y)), radius, (255,255,255), -1)

dst = cv2.inpaint(image, black_image, 10, cv2.INPAINT_TELEA)
cv2.imwrite("filled_blobs.png", black_image)
cv2.imwrite("dst.png", dst)

这里先是使用blob_log函数从灰度图像中检测斑点,并将检测到的斑点存储在blobs中。根据图像的高度和宽度,创建一个与输入图像相同尺寸的全黑图像,用于标记检测到的斑点。

使用for循环遍历检测到的每个斑点,然后在全黑图像上绘制一个白色的圆圈来标记斑点的位置和大小。

使用图像修复技术,将标记了斑点的全黑图像balck_image与原始图像image相结合,生成修复后的图像dst。

这里保存了两张图,一张是mask,一张是处理后的图片。

检测到的mask:

处理后的图片:

原先的图片受到了噪点的污染,在处理后的效果很不错了,这里你可以选择调参优化,或者再加一个参数小的滤波处理。

这种方法的原理是检测白色噪点位置,生成对应的掩模图,然后使用修补函数,用附近的像素点替代掉噪点,比起滤波处理会让图像变得模糊,使用这种方式让图像更加的平滑。

如果是其他颜色的污染,你可以参照本文开头给的那篇博客,里面有详细的介绍。

当然,这种方法有些缺陷,它在某些特定的场景下,表现效果很好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EDI经营许可证办理要求及流程全解!

我们正处在互联网的大时代,从事互联网行业又会想到电商,提到电商企业,大家会关注这个平台是否合法或是否靠谱,那除了对这个电商品牌的认知以外,还会关注其是否合法合规为用户提供货物购买交易服务,是否具备…

评价模型:层次分析法

1. 模型建立 1.1 建立层次结构模型 在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层…

day10常用API

1.API 1.1API概述 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要…

奶牛个体识别 奶牛身份识别

融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法 Light-weight recognition network for dairy cows based on the fusion of YOLOv5s and channel pruning algorithm 论文链接 知网链接 DOI链接 该文章讨论了奶牛花斑、光照条件、不同剪枝方法、不同剪枝率对准确率的影响…

【C语言】指针查漏补缺

【C语言】指针查漏补缺 预备知识一维整数数组字符数组字符常量数组字符串常量二维数组 预备知识 sizeof 是计算对象或者类型创建的对象所占内存空间的大小,单位是字节 sizeof 是操作符,不是函数 strlen 求字符串长度的,计算的是字符串中\0之…

向量的概念、向量组的概念

目录 向量的概念、向量组的概念 向量的基本运算 线性表出、线性相关、线性无关 向量的概念、向量组的概念 向量(Vector)是一个有次序的数所组成的数组,通常用来表示一个物理量或者一个对象在空间中的移动。向量可以表示位置、速度、力等物…

竞赛 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…

蓝牙核心规范(V5.4)12.2-深入详解之加密广播数据(Encrypted Advertising Data)

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.知识回顾 1.1 带响应的周期广播 在上一节已经讲了。 1.2 广播结构体 蓝牙核心规范定义了广播数据(AD)结构。它是一个用于包含在蓝牙LE广告和扫描响应数据包中以及在蓝牙BR/EDR扩展查询响应(EIR)数据包中的一般容器。包含在A…

nvm 一个nodejs版本管理工具

nvm 一个nodejs版本管理工具 NVM是什么 nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js NVM下载 可在点此在…

长城靶场溯源第四题

先统计访问的ip 直到第一个包过滤到202.1.1.2 很明显的一句话木马,就是他了,202.1.1.2 卡描述:2.服务器1.99的web服务器使用的CMS及其版本号(请直接复制) 继续查看同一个数据包,发现个奇奇怪怪的phpinf…

python flask框架接受axios发送的图片文件

文章目录 前端部分axios配置请求部分代码页面代码 后端代码结果 前端部分 axios配置 主要是一些基础的配置,这里可看可不看,主要的不是这里 import axios from axios; let baseURL /demo// 创建axios实例 const service axios.create({// axios中请…

山洪灾害预警方案(山洪预警解决方案的组成)

​ 随着气候变化的不断加剧,山洪灾害在许多地区成为了极具威胁性的自然灾害之一。为了帮助地方政府和居民更好地预防和应对山洪灾害,我们设计了一套基于星创易联的SR600工业路由器和DTU200的山洪灾害预警方案,并成功在某地区进行了部署。 案…

【Linux从入门到精通】线程 | 线程介绍线程控制

本篇文章主要对线程的概念和线程的控制进行了讲解。其中我们再次对进程概念理解。同时对比了进程和线程的区别。希望本篇文章会对你有所帮助。 文章目录 一、线程概念 1、1 什么是线程 1、2 再次理解进程概念 1、3 轻量级进程 二、进程控制 2、1 创建线程 pthread_create 2、2…

代码随想录算法训练营第49天|121. 买卖股票的最佳时机,买卖股票的最佳时机II

链接: 121. 买卖股票的最佳时机 链接: 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出…

代码托管的力量:构建协作、追踪和持续交付的软件开发生态系统

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 在现代软件开发中…

浅析-vue.js

学习目标 会创建Vue实例,知道Vue的常见属性会使用Vue的生命周期的钩子函数会使用vue常见指令会使用vue计算属性和watch监控会编写Vue组件掌握组件间通信了解vue-router使用了解webpack使用会使用vue-cli搭建项目 0.前言 前几天我们已经对后端的技术栈有了初步的了…

Spark_Spark内存模型管理

工作中经常用到Spark内存调参,之前还没对这块记录,这次记录一下。 环境参数 spark 内存模型中会涉及到多个配置,这些配置由一些环境参数及其配置值有关,为防止后面理解混乱,现在这里列举出来,如果忘记了&a…

冠达管理:庄家最怕的8个方法?

在股票商场上,庄家总是短时刻内操控价格,并在一定的时刻内进出股市,以赚取巨额赢利。 假如想在股票商场上盈余,那么就必须站在庄家的对立面,把握一些防护和反击的办法。这里就来介绍一些庄家最怕的办法。 一、技能剖析…

恒运资本:沪指震荡涨0.28%,医药板块强势拉升,金融等板块上扬

15日早盘,沪指盘中震荡上扬,科创50指数表现强势;北向资金小幅净流入。 到午间收盘,沪指涨0.28%报3135.31点,深成指、创业板指涨均0.11%,科创50指数涨1.04%;两市合计成交4357亿元,北…

Java基础语法之数组

💕十年生死两茫茫,不思量,自难忘💕 作者:Mylvzi 文章主要内容:Java学习之--数组 一.数组的基本概念 1.定义 数组是相同数据类型的集合!使用数组来存放多个相同类型的数据! 2.Jav…