当前位置: 首页 > 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
http://www.lryc.cn/news/58723.html

相关文章:

  • 在three.js中废置对象
  • Java中的String类真的不可变吗?
  • 电脑重装了系统开不了机怎么办?
  • SPOJ-NSUBSTR - Substrings(SAM求所有长度子串的最大出现次数)
  • Mariadb10.5基于同服务器多实例主从配置
  • linux 修改主机名称
  • 学校的地下网站(学校的地下网站1080P高清)
  • 勒索病毒是什么?如何防勒索病毒
  • SpringBoot+VUE+Axios 【链接超时】 后端正常返回结果,前端却出现错误无法接收数据
  • 【状态估计】基于增强数值稳定性的无迹卡尔曼滤波多机电力系统动态状态估计(Matlab代码实现)
  • 快速排序的简单理解
  • 短视频多平台发布软件功能详解
  • 谷歌人机验证Google reCAPTCHA
  • VB+ACCESS电脑销售系统的设计与实现
  • 嵌入式开发:硬件和软件越来越接近
  • 亲测:腾讯云轻量应用服务器性能如何?
  • 编程语言,TIOBE 4 月榜单:黑马出现了
  • 基于DSP+FPGA的机载雷达伺服控制系统(二)电源仿真
  • SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
  • 优漫动游告诉你:平面设计适合你吗?
  • 在Vue中,为什么从 props 中解构变量之后再watch它,无法检测到它的变化?
  • [源码解析]socket系统调用上
  • Jenkins部署与自动化构建
  • 网络编程三要素
  • 如何编写一个自己的web前端脚手架
  • 计算机网络第1章(概述)
  • grid布局
  • 博客平台打造出色的个人资料管理与展示:实用技巧与代码示例
  • 【genius_platform软件平台开发】第九十三讲:串口通信(485通信)
  • JavaScript动画相关讲解