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

matlab图像灰度值变换至指定范围,求转换方程

声明:笔者关于matlab主题的帖子内容均来自于课堂作业,课堂笔记以及自己在学习过程中查询matlab官方文档获得的学习经验,分享到CSDN一方面是作为自己的学习笔记,另一方面希望可以帮助到和我
声明:笔者关于matlab主题的帖子内容均来自于课堂作业,课堂笔记以及自己在学习过程中查询matlab官方文档获得的学习经验,分享到CSDN一方面是作为自己的学习笔记,另一方面希望可以帮助到和我一样的初学者。题目来自于笔者在美帝学习CS的作业,代码属于笔者原创,转载请注明出处,禁止抄袭。哈哈说的有点严重是因为内容来自美帝课堂,为了博主不被遣返,希望各位看官理解。

题目:
自定义一个Scaling函数区实现如下功能:将原图的灰度值范围规范到用户指定的范围,并绘制转换方程的图像。

函数原型为:function [scaledIm, transFunc] = Scaling(inputIm, range)

其中:inputIm为输入的图像,range为指定的灰度值新范围。scaledIm为处理后的图像,transFunc为一个包含n个元素的行或列向量,n为原图像的灰度值的最大值-最小值+1(即原图灰度值范围),该向量的第一个元素应该是新图像灰度值的最小值,最后一个元素为新图像的灰度值的最大值。

要求:1.输入和输出的图像都是uint8类型。2. 对用户输入的范围作有效性验证,如果不符合(0,255)要给出错误提示。

举例说明:
为了方便理解这个题目要做的事情是什么,博主这里贴出自己举的例子。

这里写图片描述

代码实现:

function [scaledIm, transFunc] = Scaling(inputIm, range)

 scaledIm = inputIm;
 [row, col] = size(inputIm);  % get the size 

 % get the input range
 rangeLow = double(range(1));
 rangeHigh = double(range(2));

 % Determine if the input range is valid
 % If not valid, return
 if rangeLow<0 || rangeHigh>255 || rangeLow>255 || rangeHigh<0 || rangeLow>rangeHigh
     disp('Out of range! Range is between 0 and 255');
     return;
 end

 % get the max, min and range of inputIm
 maxIm = double(max(max(inputIm)));
 minIm = double(min(min(inputIm)));
 % n is the original range of max and min, used to cpmpute the transform function
 n = maxIm - minIm + 1;

 % calcaulate the slope and constant of transformation function
 % y = kx + b
 k = ( rangeHigh - rangeLow )/( maxIm - minIm );
 b = rangeHigh - maxIm * k;

 % Transform inputIm to scaledIm
 for i = 1 : row
     for j = 1 : col
         scaledIm(i,j) = uint8( k * double(inputIm(i,j)) + b);
     end
 end

 % Display vector transfunc
 transFunc =  zeros(1,n);
 for i = 1 : n
     transFunc(i) = (minIm + i - 1) * k + b ;
 end

主函数为:

[scaledFood,transFunc] = Scaling(food,[0 255]);
figure(1);
subplot(1,2,1);imshow(scaledFood);title('Scaled food');
subplot(1,2,2);plot(transFunc);
xlabel('orignal value');
ylabel('transfered value');

运行结果:

这里写图片描述

这里是规范化之前的原图,可以看到明显的区别。

这里写图片描述


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
author-avatar
傻瓜等傻子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有