一种全新的图像滤波理论的实验(二)

news2024/10/5 17:21:36

一、前言

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转YUV
	img = 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转RGB
	SaveBmpImage(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值不同,能产生的效果也不同,可以在不同的场景下设置具体的值。
(接下来的实验,我讲从上述三个方向逐步发布)

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

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

相关文章

【论文简述】GMFlow: Learning Optical Flow via Global Matching(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Haofei Xu 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;CVPR oral 4. 关键词&#xff1a;光流、代价体、Transformers、全局匹配、注意力机制 5. 探索动机&#xff1a;过去几年中具有代表性的光流学习框架的核心估计方式没有…

Java文件IO及其案例分析

目录 1. 文件概述 1.1 狭义和广义上的文件 1.2 文件的路径 1.3 文件的类型 2. 针对文件系统的操作 3. 针对文件内容的操作&#xff08;文件的读和写&#xff09; 3.1 IO流对象 3.2 文件的读操作&#xff08;字节流&#xff09; 3.3 文件的写操作&#xff08;字节流&#…

内存取证常见例题思路方法-volatility (没有最全 只有更全)

目录 1.从内存文件中获取到用户hacker 的密码并且破解密码&#xff0c;将破解后的密码作为 Flag值提交; 2.获取当前系统的主机名&#xff0c;将主机名作为Flag值提交; 3.获取当前系统浏览器搜索过的关键词&#xff0c;作为Flag提交; 4.获取当前内存文件的 ip地址 5.当前系…

pycharm和navigator打开时出现报错,无法正常打开

1、navigator打开时出现提示&#xff1a; 原因是&#xff1a;python.exe有多个任务在占用。 解决办法&#xff1a; &#xff08;1&#xff09;打开cmd &#xff08;2&#xff09;输入&#xff1a;tasklist | findstr “pythonw” &#xff08;3&#xff09;有几个线程就kill几个…

qt qchart学习

Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、**数据源(由QAbstractSeries子类实现)**等组成使用QChart的前期准备1. Qt5.9及以上版本&#xff1b;2. .pro文件中添加QT charts3. 在使用QChart的各个控件之前&#xff0c;引用头文件并必…

【前缀和】和为k的子数组 路径总和 III

文章目录和为k的子数组路径总和 III和为k的子数组 动态规划算法&#xff08;超时&#xff09; class Solution { public:int subarraySum(vector<int>& nums, int k) {int n nums.size();vector<vector<int>> dp(n, vector<int>(n, 0));int ans …

b2b b2c o2o分布式电子商务平台源码 mybatis+spring cloud

鸿鹄云商大型企业分布式互联网电子商务平台&#xff0c;推出PC微信APP云服务的云商平台系统&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言&#xff1a; java、j2ee 数据库&am…

注解@Transactional 原理和常见的坑

这篇文章&#xff0c;会先讲述 Transactional 的 4 种不生效的 Case&#xff0c;然后再通过源码解读&#xff0c;分析 Transactional 的执行原理&#xff0c;以及部分 Case 不生效的真正原因1 项目准备下面是 DB 数据和 DB 操作接口&#xff1a;uidunameusex1张三女2陈恒男3楼仔…

百万医疗险是什么

一、百万医疗险是什么 从名字可以看出&#xff0c;这是一款医疗险。因为保额高&#xff0c;最高能报销百万&#xff0c;所以叫百万医疗险。 二、百万医疗险有什么用 可以报销被保险人因意外伤害和疾病导致的医疗费用 三、如何挑选 虽然高达几百万的保额&#xff0c;但保额却并非…

cas单点登录-自定义登录界面 / 自定义主题风格(三)

cas单点登录-自定义登录界面 / 自定义主题风格&#xff08;三&#xff09; 在前面的文章中&#xff0c;介绍了使用cas实现SSO单点登录&#xff0c;静态登录&#xff0c;使用mysql数据库登录。但是在登录时都是跳转到了同一个登录界面。 假设现在我有两个子站点app1.com&#x…

【Docker】初识Dcoker以及镜像操作(一)

目录 1.初识Docker 1.1.什么是Docker 1.1.1.应用部署的环境问题 1.1.2.Docker解决依赖兼容问题 1.1.3.Docker解决操作系统环境差异 1.1.4.小结 1.2.Docker和虚拟机的区别 1.3.Docker架构 1.3.1.镜像和容器 1.3.2.DockerHub 1.3.3.Docker架构 1.3.4.小结 1.4.安装D…

Three.js铅笔手绘效果实现

在这个教程中&#xff0c;我们将学习如何使用 Three.js 后处理创建铅笔手绘效果。 我们将完成创建自定义后处理渲染通道、在 WebGL 中实现边缘检测、将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理调整最终结果的步骤。 这就是最终结果的样子&#xff0c;让我们开始…

NLP学习笔记(九) 分词(上)

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲分词算法 1 概述 分词是自然语言处理领域中的基础任务&#xff0c;是文本预处理的重要步骤 简单来说&#xff0c;就是将文本段落分解为基本语言单位&#xff0c;亦可称之为词元 ( token\text{token}token ) 按照粒度的不…

day50【代码随想录】动态规划之不同的子序列、两个字符串的删除操作、编辑距离

文章目录前言一、不同的子序列&#xff08;力扣115&#xff09;【hard】二、两个字符串的删除操作&#xff08;力扣583&#xff09;思路一思路二三、编辑距离&#xff08;力扣72&#xff09;【hard】前言 1、不同的子序列 2、两个字符串的删除操作 3、编辑距离 一、不同的子序…

网页扫描图像并以pdf格式上传到服务器端

本文描述如何通过网页驱动扫描仪、高拍仪等图像扫描设备进行图像扫描&#xff0c;扫描结果经编辑修改后以pdf压缩格式上传到后台java程序中进行服务器端落盘保存。图像扫描上传如文字描述顺序所介绍&#xff0c;先要驱动扫描设备工作&#xff0c;进行纸张数据的光学扫描操作形成…

Impacket工具使用

Impacket工具说明 Impacker是用户处理网络协议的Python类集合,用于对SAB1-3或IPv4/IPv6 上的TCP/UPD/ICMP/IGMP/ARP/IPv4/IPv6/SMB/MSRPC/NTLM/Kerberos/WMI/LDAP 等进行低级的编程访问,数据包可以从头开始构建,也可以从原始数据包中解析, 面向对象API使用处理协议的深层结构变…

Action Segmentation数据集介绍——Breakfast

文章目录简介细节Cooking actibitiesillustration of the actions论文讲解Breakfast&#xff08;The Breakfast Action Dataset&#xff09;简介 早餐动作数据集包括与早餐准备相关的10个动作&#xff0c;由18个不同厨房的52个不同的人执行。该数据集是最大的完全带注释的数据…

CCIE 350-401-实验全

实验 VRRP&#xff08;hello packettimes advertise&#xff09; This is a lab item in which tasks will be performed on virtual devices. Refer to the Tasks tab to view the tasks for this lab item.Refer to the Topology tab to access the device console(s) and p…

Spring Boot自动装配的原理

Spring Boot自动装配的原理自动装配的实现EnableAutoConfigurationAutoConfigurationImportSelectorSpring Boot中的自动装配&#xff0c;它是Starter的基础&#xff0c;也是Spring Boot的核心。那么什么叫自动装配呢&#xff1f;或者说什么叫装配呢&#xff1f; 简单来说&…

Vulnhub靶场----4、DC-4

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-4下载地址&#xff1a;https://download.vulnhub.com/dc/DC-4.zip kali&#xff1a;192.168.144.148 DC-4&#xff1a;192.168.144.152 二、渗透流程 端口扫描&#xff1a;nmap -T5 -p- -sV -sT -A 192.168.144.1…