热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

直方图规定化的编程实现

题目matlab代码代码是自己码的,用最简单粗暴的方法(毫无技巧可言),而且还不一定对。。。。仅供参考里面我设置了一个ra

题目

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200406112735923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Nsb3Zlcl9wb2Z1,size_16,color_FFFFFF,t_70




matlab代码

代码是自己码的,用最简单粗暴的方法(毫无技巧可言),而且还不一定对。。。。仅供参考
里面我设置了一个ratio值,是用来控制映射的。不同的ratio值结果会不一样噢,大家注意~

%原始图像,像素的最高亮度级为160
R=[1 7 8 9 10 11 14;5 2 6 7 14 12 15;3 4 7 8 6 9 11;2 1 4 7 8 8 9;8 4 5 9 11 12 10;8 10 11 15 16 10 13;13 6 9 16 13 12 10]*10;
%统计像素矩阵中各像素出现的次数
R1=tabulate(R(:)); %返回:像素值 出现次数 占比%
R2=R1(:,1); %I1的第一行,0160
R3=R1(:,2)/49; %占比,相当于I3=I1(:,3)/100
[m_r,n_r]=size(R2); %[160,1]
r=[];pr=[]; %for循环后,筛选出图像中存在的亮度级,r装像素亮度级,pr装亮度级对应的占比
for i=1:m_rif R3(i,1)~=0r(end+1)=R2(i,1);pr(end+1)=R3(i,1);end
end
figure
subplot(3,1,1);
stem(r,pr);
axis([0 255 0 0.3]);
title("原图像的灰度直方图");
xlabel("r");ylabel("pr");%参考图像
Z=[10 9 11 12 10 11 10;9 10 11 12 11 12 11;9 11 10 12 13 14 13;12 12 10 13 14 15 13;11 13 14 16 16 14 15;14 12 12 15 16 15 14;13 12 13 16 13 14 15]*11;
Z1=tabulate(Z(:));
Z2=Z1(:,1);
Z3=Z1(:,2)/49;
[m_z,n_z]=size(Z2);
z=[];pz=[];
for i=1:m_zif Z3(i,1)~=0z(end+1)= Z2(i,1);pz(end+1)= Z3(i,1);end
end
subplot(3,1,2);
stem(z,pz);
axis([0 255 0 0.3]);
title("参考图像的灰度直方图");
xlabel("z");ylabel("pz");[m_i1,n_i1]=size(pr); %返回[1,16]
[m_j1,n_j1]=size(pz); %返回[1,8]ratio=0.9; %控制阈值,如果当前的temp_v还够放90%的temp_r,那就整个塞进去,of course你也可以自己选比例值
v=[];num_r=1;num_z = 1; %“指针”初始化,指向第一个位置
temp_r=pr(num_r);temp_v=pz(num_z); %初始化,r和z都指向第一个填充位
num_r&#61;num_r&#43;1;num_z&#61;num_z&#43;1; %指针指向下一个位置while (num_z<&#61;n_j1)if(temp_v<(temp_r*ratio)) %z在这个填充位的容量太小&#xff0c;不适合放东西&#xff0c;跳到下一个v&#61;[v 0]; %v可以不打分号&#xff0c;看看输出和自己计算的一不一样temp_v&#61;temp_v&#43;pz(num_z);num_z &#61;num_z&#43; 1;endif(temp_v>&#61;(temp_r*ratio))if(temp_v&#61;&#61;(temp_r*ratio)) %刚好匹配v&#61;[v temp_r];temp_r&#61;pr(num_r);num_r&#61;num_r&#43;1;temp_v&#61;pz(num_z);num_z &#61;num_z&#43;1;else %这个填充位置容量大&#xff0c;看看能不能多放几个load&#61;temp_r;while(temp_v>&#61;(load*ratio))temp_r&#61;load;if(num_r<&#61;n_i1) %如果r还有下一位load&#61;temp_r&#43;pr(num_r);num_r&#61;num_r&#43;1;endendnum_r&#61;num_r-1; %加多了&#xff0c;回退一位v&#61;[v temp_r];temp_v&#61;temp_v-temp_r;if(num_r<&#61;n_i1)temp_r&#61;pr(num_r);num_r&#61;num_r&#43;1;endtemp_v&#61;temp_v&#43;pz(num_z);num_z&#61;num_z&#43;1;endendend
v&#61;[v temp_r];subplot(3,1,3);stem(z,v);
axis([0 255 0 0.3]);
title("原图像经过直方图规定化的灰度直方图");
xlabel("v");ylabel("pv");



运行结果对比


ratio&#61;0.7

在这里插入图片描述


ratio&#61;0.8

在这里插入图片描述


ratio&#61;0.85

在这里插入图片描述


ratio&#61;0.9

在这里插入图片描述


推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了在序列化时如何对SnakeYaml应用格式化,包括通过设置类和DumpSettings来实现定制输出的方法。作者提供了一个示例,展示了期望的yaml生成格式,并解释了如何使用SnakeYaml的特定设置器来实现这个目标。对于正在使用SnakeYaml进行序列化的开发者来说,本文提供了一些有用的参考和指导。摘要长度为169字。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
author-avatar
鱼儿37度半_795
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有