一种全新的图像滤波理论的实验(二)
一、前言
2021年12月31日,我发布了基于加权概率模型的图像滤波算法的第一个实验,当时有两个关键问题没有解决:
1、出现了大面积的黑色区域,最近考虑把这个算法实际应用在图像和视频的压缩领域,于是通过对程序的分析,发现输出时丢失了部分数据。
2、出现两点问题,在黑度图像来讲就是出现,白点和黑点问题,这个问题仅需在图像逆滤波后再修复,因为白点一定会出现在黑色区域,而黑点可以通过相邻预测的方式进行修复,下面的实验在滤波时不考虑修复问题。
今天是2023年2月20日,通过把程序做了整数化处理,并且把丢失问题整理后,我又做了一些实验,实验调用的代码如下:
int main() {BmpImage* img;const char* fileName1 = "D:\\Lena512.bmp";const char* fileName2 = "D:\\Lena512-mode1-15.bmp";unsigned char* outbuff1, * outbuff2;int filterRatio = 15;int i, count = 0, count1 = 0;unsigned int outlength1 = 0, length = 0;double h;// 装载BMP,并把RGB转YUVimg = LoadBmpImage(fileName1);length = img->bmpInfoHeader.biWidth * img->bmpInfoHeader.biHeight;// 统计符号1的个数for (i = 0; i < length; ++i) {count += CntOfOneSymboltemp[img->rgbdatas->ucR[i]];}// 把灰度图像进行滤波变换outbuff1 = WJLFilterTransform(filterRatio, img->rgbdatas->ucR, length, &outlength1);if (img->rgbdatas->ucR) free(img->rgbdatas->ucR);for (i = 0; i < outlength1; ++i) {count1 += CntOfOneSymboltemp[outbuff1[i]];}// 把outbuff1进行逆滤波outbuff2 = WJLFilterInverseTransform(filterRatio, outbuff1, outlength1, &length);if (outbuff1) free(outbuff1);img->rgbdatas->ucR = outbuff2;// 又把YUV转RGBSaveBmpImage(fileName2, img);// 释放if (img->rgbdatas->ucR) free(img->rgbdatas->ucR);if (img->rgbdatas) free(img->rgbdatas);if (img) free(img);system("pause");// 测试图像压缩return 0;
}
实验采用的灰度图像为:
二、无修复部分的实验
本实验会通过几个参数设定,方便得出滤波效果以及出现了白点和黑点问题。
(2.1)实验一,filterRatio = 0
将filterRatio 设置为 0,通过编码后得出打印结果为:
从上述打印的情况可以看出,滤波是无效果的,而且字节和数据并没有变化,所以通过信息熵计算出来的压缩比几乎等于1。我采用UC进行二进制比较可以得出:
当filterRatio 设置为 0时,任何字节差错都不会出现,这个过程实际上是无滤波效果的,整个过程是无损的。
(2.2)实验二,filterRatio = 3
将filterRatio 设置为 3,显然,符号1的数量发生了变化,且滤波后的数据长度也发生了变化,采用二进制比较时,同样也会出现5073个字节差异。
而且滤波后的图像如下,已经在黑色区域出现白色的点,而且某些灰色区域出现了黑点:
(2.3)实验三,filterRatio = 15
将filterRatio 设置为 15此时图像为:
显然黑点和白点出现的更多了。
通过实验得出,所有的白点一定会出现在黑色区域,但是黑色的点可能出现的位置有很多,不过如果是正确的值则和原始数据一致。为了验证上述白点一定会出现在黑色区域,所以我有设计了下面的图方便验证!
三、验证白色的点一定会出现在黑色区域
实验将采用两个图来进行,一张是细胞的灰度图像,另一张是文字灰度图,分别如下:
(3.1)实验四,filterRatio = 15
得出如下效果:
显然,白色的点一定会出现在黑色区域。
(3.2)实验五,filterRatio = 25
显然,这个意义非常重要,于是我又手绘了一张图,进行测试,发现可以准确的找出绘画的轨迹(filterRatio = 15)。
显然,处理滤波以外,本算法还有其他的一些意义和价值。
四、总结
通过实验不难看出,加权概率模型是可以在图像以下几个地方应用:
1、滤波,但是滤波后需要根据白点和黑点提出适合的修复方案,比如上下文差异的数值求均值填充等。
2、图像分割,通过白点必然出现在黑色区域,来针对图像进行分割,类似snake和等高线算法等,这个需要根据具体图像进行具体分析。
3、图像识别,通过对比滤波后的图和原始图,显然能得出图中的黑色文字和任意手笔迹,也就是说像素值存在下面三种情形:
设x代表的是原始值,y代表的是滤波并逆滤波后的值,于是:
(1)当y-x<t时,可以直接丢弃
(2)当y-x>=t时,则认为是当前文字或笔迹的位置,因为灰度图中黑色的值一定是接近0的值,而白色的点一定是接近255的值,另外因为白色的点一定会出现在黑色区域,所以本算法能有效的提取出图像中的文字或笔迹,然后拿这样的结果去训练识别算法即可。
4、图像锐化,显然通过上述的实验能给出图形的实际边缘,然后再通过简单的代数处理即可实现图形的边缘锐化,当然这个在某些场景下可用。
另外,filterRatio值不同,能产生的效果也不同,可以在不同的场景下设置具体的值。
(接下来的实验,我讲从上述三个方向逐步发布)
相关文章:

一种全新的图像滤波理论的实验(二)
一、前言 2021年12月31日,我发布了基于加权概率模型的图像滤波算法的第一个实验,当时有两个关键问题没有解决: 1、出现了大面积的黑色区域,最近考虑把这个算法实际应用在图像和视频的压缩领域,于是通过对程序的分析&a…...

Boost库文档搜索引擎
文章目录综述效果展示去标签化,清理数据构建索引用户查询综述 该项目使用了BS架构,实现了用户对Boost库进行站内搜索的功能, 用户输入关键字使用http协议通过ajax将数据发送给后端服务器,后端进行分词, 通过倒排索引…...

Linux中安装JDK
Linux中安装JDK一 、下载JDK包1、下载网址2、往下翻,找到 java83、继续往下翻找到要下载的版本 64位linux版本二 上传jdk安装包三 开始安装整体过程1、解压文件2、查看解压文件3、进入解压文件夹确认4、配置环境变量5、重新加载环境变量6、确认安装成功一 、下载JDK…...

宝塔面板公网ip非80端口非443端口部署ssl
有不少人使用家用宽带,虽然申请下来了公网ip,但是运营商封了80与443端口,但仍想使用ssl证书 一、仅封80端口 1、先在宝塔面板里创建网站,域名为test.xxx.cn:8085 2、再到域名运营商做A记录解析,此时可以通过http://…...

手撕八大排序(上)
排序的概念及其引用: 排序的概念: 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有…...
clickhouse 怎么统计每天0点到10点的某个字段的数据量
比喻:统计最近一周0点到10点期间每天id的数量 日期:2023-03-23 09:02:22 日期全是这种格式 第一步先把日期转小时:先把小于10小时的查出来 toHour(card_time)<10 select toDate(t.dates) as dates,sum(t.count) as count from ( se…...
[qiankun]-图片加载问题
[qiankun]-图片加载问题开发版本图片加载报错现象描述分析解决方案base64的展示格式静态资源的展示方式取消hash的取值方式,并在主应用中添加图片设置图片的绝对路径根据环境动态设置图片的绝对路径nginx转发方式开发版本 "vue": "^3.2.45", &…...

关于upstream的八种回调方法
1 creat_request调用背景:用于创建自己模板与第三方服务器的第一次连接步骤1) 在Nginx主循环(ngx_worker_process_cycle方法) 中,会定期地调用事件模块, 以检查是否有网络事件发生。2) 事件模块…...
0303泰勒公式-微分中值定理与导数的应用
文章目录1 引入2 泰勒中值定理2.1 泰勒多项式3.2 泰勒中值定理13.3 泰勒中值定理22.4 误差估计4 麦克劳林公式5 常见麦克劳林公式6 泰勒公式相关例题6.1 将函数展成指定的泰勒公式6.1.1 公式法6.1.2 间接展法(变量替换)6.2 利用泰勒公式求极限6.3 确定无…...
日常运维基础命令
commandexplainps -f -u user_name显示指定用户的进程ps aux --sort-pcpu,pmem先以cpu使用量进行排序,cpu使 用一样,以内存使用率排序ps -ef --forest显示ACLII进程数ps --ppid 28208显示父进程的子进程ps -p 14447 -L显示进程的线程ps -e -o pid&#x…...

人员行为识别系统 TensorFlow
人员行为识别系统人员行为识别系统通过TensorFlow深度学习技术,人员行为识别算法对画面中区域人员不按要求穿戴、违规抽烟打电话、睡岗离岗以及作业流程不规范实时分析预警,发现违规行为立即抓拍告警。深度学习应用到实际问题中,一个非常棘手…...
ES-倒排索引BKD原理skiplist
1.Elasticsearch数据存储结构FST、skiplist、BKD-tree、LSM-tree Elasticsearch数据结构存储流程_善思的博客-CSDN博客_elasticsearch 数据结构 number?keyword?傻傻分不清楚 - Elastic 中文社区 ElasticSearch实战(六)-Skip List 跳表算法…...

每天一道大厂SQL题【Day12】微众银行真题实战(二)
每天一道大厂SQL题【Day12】微众银行真题实战(二) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...

带您了解TiDB MySQL数据库中关于日期、时间的坑
带您了解TiDB & MySQL数据库中关于日期、时间的坑时间的基础知识什么是时间计算时间的几种方法世界时(UT)协调世界时(UTC)国际原子时(TAI)时区的概念中国所在的时区操作系统的时区datetimedatectl数据库…...

【华为OD机试模拟题】用 C++ 实现 - 求字符串中所有整数的最小和
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...

harbor 仓库迁移升级
harbor 仓库迁移升级 harbor仓库安装数据传输仓库切换版本 v1.8.0 v2.3.5 harbor仓库安装 环境准备:安装docker详见:docker 的介绍和部署,并下载docker-compose详见:docker 三剑客compose。 现有支持的安装harbor仓库的方式有两…...
评论功能设计思路~
文章目录 评论功能设计框架1、定义2、目标3、动机4、评论类别**5、评论互动****6、评论区展示结构****6.1 主题式****6.2 平铺式****6.3 盖楼式****7、评论排序机制****8、评论加载形式****9、其他**结语评论功能设计框架 1、定义 评论是指针对于事物进行主观或客观的自我印象…...

算法训练营 day52 动态规划 买卖股票的最佳时机系列1
算法训练营 day52 动态规划 买卖股票的最佳时机系列1 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣(LeetCode) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票…...

3.基于分割的文本检测算法--DBNet++
文章目录1.概况2.DBNet中的主要方法2.1 网络结构2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)3.ASF模块的源码实现参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 1.概况 2022年02月份论文:Real-Time S…...
IOS打包、SDK接入记录等
IOS打包、SDK接入记录等 Mac上安装HCLR路径 /Applications/Unity/Hub/Editor/2019.4.40f1c1/Unity.app/Contents/il2cpp HCLR 指定4.40是要Unity启动打开的il2cpp,否则HCLR Installer他会报找不到MonoBleedingEdge Mac删除证书 只能点击钥匙串做上角的登录后&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...