当前位置: 首页 > news >正文

杰林码图像增强算法——超分辨率、图像放大、轮廓和色彩强化算法(二)

一、前言

2023-03-23我发布了基于加权概率模型(杰林码的理论模型)的图像颜色增强和轮廓预测的应用方法。效果还不太明显,于是我又花了2周的时间进行了技术优化。下面仅提供了x86下的BMP和JPG对应的lib和dll,本文中的算法属于我国自主的发明专利技术,商用必须获得授权,可提供linux(麒麟、鸿蒙)、x64、riscv、ARM等库,可在GPU上实现视频清晰化处理。在相同的尺寸下加权概率模型优化后的效果:
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
效率方面还不错,一张1080P的图像大概能在1秒左右运算完毕。如果采用多线程完全可以在GPU上实现多帧优化。上面相关参数设置的比较夸张,实际情况下可以根据个人感觉进行设置。

二、测试程序

int main() { // 3ULONGLONG t1, t2;WJLImageEnhancement wie;int err;char url1[200], url2[200];int i, length;ImageEnhanced imageEnhanced;// 设置对应的参数imageEnhanced.magnification = 0;          // 图像放大尺寸,0为不放大仅做清晰化处理imageEnhanced.contour_size = 15;          // 轮廓像素范围,影响清晰度和运算效率,越大越清晰但运算所需时间越长imageEnhanced.jielin_ratio = 35;          // 杰林码系数0-49共50种值,越接近0则可以分解出背景的子图,越接近50则可以分解出前景子图imageEnhanced.foreground_clear_size = 7;  // 前景清晰化的像素范围imageEnhanced.background_clear_size = 3;  // 背景清晰化的像素范围imageEnhanced.threshold = 13;             // 相邻像素值之差的绝对阈值,当绝对值大于等于threshold时属于需要清晰化的像素值,配合foreground_clear_size和background_clear_size同时使用的const char* fileName = "xxxx";   // xxxx为BMP图像的名称sprintf_s(url1, 200, "D:\\%s.bmp", fileName);sprintf_s(url2, 200, "D:\\%s-%d-%d-%d-%d-%d.bmp", fileName, imageEnhanced.magnification, imageEnhanced.jielin_ratio, imageEnhanced.contour_size, imageEnhanced.foreground_clear_size, imageEnhanced.background_clear_size);// 把灰度图像进行滤波变换t1 = GetTickCount64();err = wie.WJL_BMPFILE_ENHANCEMENT(url1, url2, &imageEnhanced);t2 = GetTickCount64();// 耗时,包括了bmp图像读写和运算部分printf("运算总耗时:%lld ms\n", t2 - t1);system("pause");return 0;
}

三、vs2019下引用的方法

新建一个控制台项目,然后右击:
在这里插入图片描述
在这里插入图片描述
然后新建一个main.cpp

#include "WJLImageEnhancement.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <math.h>
using namespace std;
#ifdef WIN32
#define  inline __inline
#endif // WIN32int main() { // 4ULONGLONG t1, t2;WJLImageEnhancement wie;int err;char url1[200], url2[200];ImageEnhanced imageEnhanced;// 设置对应的参数,根据个人喜好设置imageEnhanced.magnification = 0;          // 图像放大尺寸,0为不放大仅做清晰化处理imageEnhanced.contour_size = 15;          // 轮廓像素范围,影响清晰度和运算效率,越大越清晰但运算所需时间越长imageEnhanced.jielin_ratio = 35;          // 杰林码系数0-49共50种值,越接近0则可以分解出背景的子图,越接近50则可以分解出前景子图imageEnhanced.foreground_clear_size = 5;  // 前景清晰化的像素范围imageEnhanced.background_clear_size = 2;  // 背景清晰化的像素范围imageEnhanced.threshold = 13;             // 相邻像素值之差的绝对阈值,当绝对值大于等于threshold时属于需要清晰化的像素值,配合foreground_clear_size和background_clear_size同时使用的const char* fileName = "heye";  // jpg的文件名sprintf_s(url1, 200, "D:\\%s.jpg", fileName);sprintf_s(url2, 200, "D:\\%s-%d-%d-%d-%d-%d.bmp", fileName, imageEnhanced.magnification, imageEnhanced.jielin_ratio, imageEnhanced.contour_size, imageEnhanced.foreground_clear_size, imageEnhanced.background_clear_size);// 把灰度图像进行滤波变换t1 = GetTickCount64();err = wie.WJL_JPGFILE_ENHANCEMENT(url1, url2, &imageEnhanced);t2 = GetTickCount64();// 耗时printf("变换算法总耗时:%lld ms\n", t2 - t1);system("pause");return 0;
}

比如下面的效果图:
在这里插入图片描述
控制台运行时间:
在这里插入图片描述
然后比较两张图的效果如下:
在这里插入图片描述
参数不同将产生不同的效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过测试,各参数的设置取值范围为:
在杰林码超分辨率的算法程序内,主要是ImageEnhanced结构体的参数直接影响到图像输出的质量。

参数名称取值范围功能说明
magnification0-3尺寸放大参数,0表示不放大,1代表图像放大(1+1)(1+1)=4倍,2代表图像放大(2+1)(2+1)=9倍,一般情况下1080P放大到4K输入1即可,一般设置为0-2
jielin_ratio0-49杰林码算法的前景背景像素分离的核心参数,越接近0获得的像素块越接近纹理背景,越接近49获得的像素块越接近前景,通过参数设置把图像分割成为前景像素块和背景像素块,属于频率变换算法的一种,一般设置为15-35
contour_size4-32这个是以块为单位的轮廓预测参数,一般情况下设置为15,越小效率越高,但是轮廓预测的越不准确,一般设置为15-24
foreground_clear_size1-16前景像素块内的连续像素个数,此值越大运算越慢,前景和背景的轮廓越清晰,一般设置为1-8
background_clear_size1-8背景纹理预测的连续像素个数,此值越大运算越慢,纹理越清晰,一般设置为1-3

相关文章:

杰林码图像增强算法——超分辨率、图像放大、轮廓和色彩强化算法(二)

一、前言 2023-03-23我发布了基于加权概率模型&#xff08;杰林码的理论模型&#xff09;的图像颜色增强和轮廓预测的应用方法。效果还不太明显&#xff0c;于是我又花了2周的时间进行了技术优化。下面仅提供了x86下的BMP和JPG对应的lib和dll&#xff0c;本文中的算法属于我国…...

在three.js中废置对象

基于three.js子如何废置对象(How to dispose of objects) 前言: 为了提高性能,并避免应用程序中的内存泄露,一个重要的方面是废置未使用的类库实体。 每当创建一个three.js中的实例时,都会分配一定数量的内存。然而,three.js会创建在渲染中所必需的特定对象, 例如几何…...

Java中的String类真的不可变吗?

其实在Java中&#xff0c;String类被final修饰&#xff0c;主要是为了保证字符串的不可变性&#xff0c;进而保证了它的安全性。那么final到底是怎么保证字符串安全性的呢&#xff1f;接下来就让我们一起来看看吧。 一. final的作用 1. final关键词修饰的类不可以被其他类继…...

电脑重装了系统开不了机怎么办?

我们的电脑办公用久后也会出现故障问题&#xff0c;例如卡顿反应慢等等&#xff0c;这时候就要进行重装系统了&#xff0c;但是很多小伙伴重装系统后会出现开不了机的问题&#xff0c;其实我们比较常见的也就是电脑重装系统开不了机的情况。有很多小伙伴反映自己不知道应该怎么…...

SPOJ-NSUBSTR - Substrings(SAM求所有长度子串的最大出现次数)

NSUBSTR - Substrings 题面翻译 你得到了一个最多由 250000250000250000 个小写拉丁字母组成的字符串 SSS。定义 F(x)F(x)F(x) 为 SSS 的某些长度为 xxx 的子串在 SSS 中的最大出现次数。即 F(x)max{times(T)}F(x)max\{times(T)\}F(x)max{times(T)}&#xff0c;满足 TTT 是 S…...

Mariadb10.5基于同服务器多实例主从配置

本次部署环境&#xff1a;Centos8stream 本次部署mariadb版本&#xff1a; mariadb:10.5 本次部署方式&#xff1a;rpm包直接安装&#xff0c;并通过systemd直接托管 可以参考 /usr/lib/systemd/system/mariadb.service 该文件 # Multi instance version of mariadb. For i…...

linux 修改主机名称

1、hostname命令进行临时更改 如果只需要临时更改主机名&#xff0c;可以使用hostname命令&#xff1a; sudo hostname <new-hostname> 例如&#xff1a; 只需重新打开session终端&#xff0c;就能生效&#xff0c; 但是&#xff0c;重启计算机后会回到旧的主机名。…...

学校的地下网站(学校的地下网站1080P高清)

这个问题本身就提得有问题&#xff0c;为什么这么说&#xff0c;这是因为YouTube本身就不是一个视频网站或者说YouTube不是一个传统的视频网站&#xff01;&#xff01;&#xff01; YouTube能够一家独大&#xff0c;可不仅仅是因为有了Google 这个亲爹&#xff0c;还有一点&am…...

勒索病毒是什么?如何防勒索病毒

勒索病毒并不是某一个病毒&#xff0c;而是一类病毒的统称&#xff0c;主要以邮件、程序、木马、网页挂马的形式进行传播&#xff0c;利用各种加密算法对文件进行加密&#xff0c;被感染者一般无法解密&#xff0c;必须拿到解密的私钥才有可能破解。 已知最早的勒索软件出现于 …...

SpringBoot+VUE+Axios 【链接超时】 后端正常返回结果,前端却出现错误无法接收数据

一、错误原因及解决思路 错误提示表明前端发送的请求在默认的 2500ms 超时时间内没有得到服务器的响应&#xff0c;导致请求失败。尝试以下方法来解决这个问题&#xff1a; 增加请求超时时间&#xff1a;可以通过配置 Axios 请求对象的 timeout 属性来增加请求的超时时间&…...

【状态估计】基于增强数值稳定性的无迹卡尔曼滤波多机电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

快速排序的简单理解

详细描述 快速排序通过一趟排序将待排序列分割成独立的两部分&#xff0c;其中一部分序列的关键字均比另一部分序列的关键字小&#xff0c;则可分别对这两部分序列继续进行排序&#xff0c;以达到整个序列有序的目的。 快速排序详细的执行步骤如下&#xff1a; 从序列中挑出…...

短视频多平台发布软件功能详解

随着移动互联网的普及和短视频的兴起&#xff0c;短视频发布软件越来越受到人们的关注。短视频发布软件除了常规的短视频发布功能&#xff0c;还拥有智能创作、帐号绑定、短视频一键发布、视频任务管理和数据统计等一系列实用功能。下面我们将分步骤详细介绍一下这些功能。   …...

谷歌人机验证Google reCAPTCHA

reCAPTCHA是Google公司推出的一项验证服务&#xff0c;使用十分方便快捷&#xff0c;在国外许多网站上均有使用。它与许多其他的人机验证方式不同&#xff0c;它极少需要用户进行各种识图验证。 它的使用方式如下如所示&#xff0c;只需勾选复选框即可通过人机验证。 虽然简单…...

VB+ACCESS电脑销售系统的设计与实现

为了使此系统简单易学易用、功能强大、软件费用支出低、见效快等特点&#xff0c;我们选择Visual Basic6.0开发此系统。Visual Basic6.0起代码有效率以达到Visual c的水平。在面向对象程序设计方面&#xff0c;Visual Basic6.0全面支持面向对你程序设计包括数据抽象、封装、对象…...

嵌入式开发:硬件和软件越来越接近

从前&#xff0c;硬件和软件工程师大多生活在自己的世界里。硬件团队设计了芯片&#xff0c;调试了从铸造厂返回的第一批样本&#xff0c;让软件团队测试他们的代码。随着虚拟平台和其他可执行模型变得越来越普遍&#xff0c;软件团队可以在芯片制造之前开始&#xff0c;有时甚…...

亲测:腾讯云轻量应用服务器性能如何?

腾讯云轻量应用服务器性能评测&#xff0c;轻量服务器CPU主频、处理器型号、公网带宽、月流量、Ping值测速、磁盘IO读写及使用限制&#xff0c;轻量应用服务器CPU内存性能和标准型云服务器CVM处于同一水准&#xff0c;所以大家不要担心轻量应用服务器的性能&#xff0c;腾讯云百…...

编程语言,TIOBE 4 月榜单:黑马出现了

TIOBE 4 月榜单已经发布了&#xff0c;一起来看看这个月编程语言排行榜有什么变化吧&#xff01; C 发展依旧迅猛 在本月榜单中&#xff0c;TOP 20 的变动不大&#xff0c;Python、C、Java 、 C 和C#依然占据前五。甚至排名顺序都和上个月一样没有变动。 同时&#xff0c;Rus…...

基于DSP+FPGA的机载雷达伺服控制系统(二)电源仿真

板级电源分配网络的分析与仿真在硬件电路设计中&#xff0c;电源系统的设计是关键步骤之一&#xff0c;良好的电源系统为电路板 上各种信号的传输提供了保障。本章将研究电源完整性的相关问题&#xff0c;并提出一系列改 进电源质量的措施。 3.1 电源完整性 电源完整性&#xf…...

SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】

文章目录前言1、分布式情况下如何加锁2、具体实现过程3、测试3.1 一个服务按照多个端口同时启动3.2 使用jmeter进行压测前言 上一篇实现了单体应用下如何上锁,这一篇主要说明如何在分布式场景下上锁 上一篇地址:加锁 1、分布式情况下如何加锁 需要注意的点是: 在上锁和释放…...

边缘节点就地智能处理方案

边缘节点就地智能处理方案 第1章项目概述 1.1项目背景 随着数字中国建设迈入深度落地与规模化赋能的全新阶段,2026年作为国家数据要素价值释放关键年、算力网络规模化落地之年以及“十五五”规划开局之年,全国各行业数字化、数智化转型正式从信息化补短板阶段迈入提质增效、深…...

YOLOv5/v7改进系列——融合EfficientNetV2主干网络的轻量化部署实践

1. 为什么选择EfficientNetV2作为YOLO的主干网络 在目标检测领域&#xff0c;YOLO系列算法因其出色的实时性能而广受欢迎。但当我们把YOLOv5/v7部署到移动端或嵌入式设备时&#xff0c;模型的计算量和内存占用就成了必须面对的难题。这时候&#xff0c;EfficientNetV2就像一位轻…...

为 Node js 服务配置 Taotoken 以实现异步 AI 内容生成

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为 Node.js 服务配置 Taotoken 以实现异步 AI 内容生成 为 Node.js 应用添加 AI 生成能力&#xff0c;例如自动生成文章摘要或代码…...

Dism++实战指南:一站式Windows系统维护的5大专业解决方案

Dism实战指南&#xff1a;一站式Windows系统维护的5大专业解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism作为Windows系统维护的专业工具&#xf…...

基于MCP与RAG构建私有化智能代码助手:从原理到部署实践

1. 项目概述&#xff1a;当MCP遇上RAG&#xff0c;一个为开发者定制的智能对话新范式最近在探索如何让AI助手更深入地理解我的代码库和私有文档时&#xff0c;我遇到了一个非常有意思的项目&#xff1a;gogabrielordonez/mcp-ragchat。乍一看&#xff0c;这个名字融合了当下两个…...

别慌!Pygame里time.sleep()报错?用Clock.tick()轻松搞定(附完整代码示例)

Pygame时间控制革命&#xff1a;为什么Clock.tick()比time.sleep()更适合游戏开发 在Pygame游戏开发的世界里&#xff0c;时间控制是构建流畅游戏体验的核心要素。许多初学者在从Python标准库转向Pygame时&#xff0c;常常会本能地使用time.sleep()来控制游戏节奏&#xff0c;却…...

OpenWrt嵌入式Linux开发入门:从编译到部署的完整实践指南

1. 项目概述&#xff1a;为什么选择OpenWrt作为嵌入式开发的起点 如果你对Linux系统有一定了解&#xff0c;并且想踏入嵌入式开发的大门&#xff0c;或者你是一个网络爱好者&#xff0c;想让家里的路由器“脱胎换骨”&#xff0c;那么OpenWrt绝对是一个绕不开的名字。它不是一…...

使用SEGGER Ozone调试nRF9160 Zephyr多线程应用:从HardFault到线程可视化

1. 项目概述&#xff1a;为什么选择Ozone调试nRF9160 Zephyr应用如果你正在用Nordic的nRF9160开发物联网设备&#xff0c;并且选用了Zephyr RTOS作为软件基础&#xff0c;那么调试环节很可能会成为你项目中的一个“痛点”。nRF9160本身集成了Cortex-M33内核、蜂窝调制解调器和丰…...

终极Citra 3DS模拟器完整指南:在电脑上免费畅玩任天堂3DS游戏

终极Citra 3DS模拟器完整指南&#xff1a;在电脑上免费畅玩任天堂3DS游戏 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在电脑上重温《精灵宝可梦》系列、《塞尔达传说》等经典3DS游戏吗&#xff1f;Ci…...

别再手动写矩阵运算了!C++项目里用Eigen库的正确姿势(附性能对比)

别再手动写矩阵运算了&#xff01;C项目里用Eigen库的正确姿势&#xff08;附性能对比&#xff09; 在计算机视觉、机器人控制或物理仿真领域&#xff0c;C开发者经常需要处理复杂的矩阵运算。我曾见过一个SLAM项目的前端代码&#xff0c;仅为了计算两个坐标系之间的变换矩阵&a…...