在用pcolor进行显示图片时,要调用colormap,caxis,shading进行设置,才有可能还原图片本来的色彩

pcolor的用法是:

pcolor(N)

其中N是一个矩阵,矩阵的行列数表示图片有多少个色块。忘了说了,pcolor不是用像素来表示图片大小,而是用色块来表示。如果N是一个a*b的矩阵,表示这个图片长宽各位(a-1)*(b-1)个色块。

a = [1 2 3 45  6 7 89 10 11 12];pcolor(a);
shading faceted;

colormap在我的上一篇博客中有介绍http://blog.csdn.net/whoispo/article/details/49913513

这里要说明的是:N矩阵的值无论有多大多小,都可以等比例变换到colormap中(1到colormap的行数)。fill中也有类似的功能,imshow没有这样的功能,也就是imshow的矩阵的值必须在colormap中。

caxis就表示N中颜色的范围,用[min,max]表示,对于N中的所有小于等于min的值,都映射到colormap的第一行,N中所有大于等于max的值,都映射到colormap的最后一行。一般我们用默认的值,也就是min是N中最小的值,max是N中最大的值。

最后说一下shading,shading有三种模式:

shading flat
shading faceted
shading interp

flat和faceted只是色块和色块直接显示不显示黑线的问题,没有太大区别。色块的颜色用的是N中较小索引的颜色,也就是第(i,j)个色块,用的是N(i,j)的颜色值。色块内部颜色一致,所以N中最后一行和最后一列都没有用到。

interp是一个插值方法。色块内部颜色不是一致的,第(i,j)个色块内部颜色,用的是第N(i,j), N(i,j+1), N(i+1,j), N(i+1,j+1)的点的颜色进行插值出来的。因此会用到N中的所有数。

好了理论部分说完了,就说一下使用时会出现的问题吧。

问题1:
问题描述:pcolor显示图片一团黑。

[X, map] = imread('corn.tif');
pcolor(X);
colormap(map);

问题原因:这是因为matlab默认采用shading faceted。图片中的黑色,实际上是很多黑线。你放大看一看就明白了。

问题解决方法:
把黑线去掉就行了,有两种方法

solution1:

[X, map] = imread('corn.tif');
h = pcolor(X);
colormap(map);
set(h, 'edgecolor', 'none');

solution2:

[X, map] = imread('corn.tif');
h = pcolor(X);
colormap(map);
shading flat;

问题2:图片显示还是不理想,不是原图。
问题原因:[X, map] = imread(‘corn.tif’) 返回的map不是pcolor要用到的colormap,而是imshow用的colormap。我上面说了,imshow是不对矩阵做等比例变换的,imshow的矩阵中0对应map中的第一行,1对应第二行,……

你可以这样试一试

[X, map] = imread('corn.tif');
imshow(X, map);

这样就很完满地显示了图片。但是这里我想用pcolor显示图片,不用imshow。这个问题的根本原因其实就是上面返回的map矩阵,后面许多都是没用的行,也就是都是0的行。这个问题对于imshow不会出现问题,但是对于pcolor就会出问题。

因此保留map中前面的非零行作为pcolor的colormap,就没有问题了。

[X, map] = imread('corn.tif');
map = map(1:128,:);
pcolor(X);
colormap(map);
shading flat;

看起来长宽有些不对啊,用axis equal可以了

[X, map] = imread('corn.tif');
map = map(1:128,:);
pcolor(X);
colormap(map);
shading flat;
axis equal;

其实上面的这些我认为都不是什么太大的问题,自己尝试一下就明白了。下面是我认为比较重要的问题。

我在试上面的例子的时候,用的是shading interp。因为我之前用的colormap都是系统自带的winter,summer之类的colormap,这些colormap变化是平滑的,所以认为用shading interp会使得图片颜色更加平滑,放大不会出现锯齿。结果:

[X, map] = imread('corn.tif');
map = map(1:128,:);
pcolor(X);
colormap(map);
shading interp;
axis equal;

我放大之后才想明白这是什么问题:

这个原因就是colormap不是平滑的,所以插值出的颜色也是不平滑的。上面是一个色块的4个角点,matlab会在中间进行插值,插值的颜色会索引colormap,但是你看一下这个colormap:

[X, map] = imread('corn.tif');
map = map(1:128,:);
pcolor(X);
colormap(map);
shading interp;
axis equal;x = [0, 0, 1, 1];
y = [0, 1, 1, 0];
figure;
fill(x, y, [0, 0, 2, 2]);
colormap(map);

我想到了一个方法也许能解决这个问题。把这个colormap进行排序,把它变得平滑一些。因为colormap变化了,所以重新修改图片矩阵的数值。这样也许就能用shading interp了。

我现在还没有试这个方法,也许以后有时间再试。

其实如果不出问题的话,shading interp真是个好东西。用这个方法显示出的图片无论放大多少都不会出现锯齿模糊,就像矢量图片一样。

关于matlab中pcolor显示图片时的shading设置问题相关推荐

  1. matlab shading颜色设置,关于matlab中pcolor显示图片时的shading设置问题

    在用pcolor进行显示图片时,要调用colormap,caxis,shading进行设置,才有可能还原图片本来的色彩 pcolor的用法是: pcolor(N) 其中N是一个矩阵,矩阵的行列数表示图 ...

  2. 4. Matlab中如何调整图片的大小

    4. Matlab中如何调整图片的大小 1. 问题提出 用matlab处理图片时,有时我们想调整图片的大小,你可以自己写一个 matlab算法来调整图片的大小,还可以用matlab内置的imresiz ...

  3. php如何随机显示图片,php中随机显示图片的函数代码_php

    /********************************************** * Filename : img.php * Author : freemouse http://www ...

  4. java byte 图片浏览器直接显示_在imge控件中直接显示图片(图片是byte[]格式)

    在工作过程中遇到了这个问题,在网上查了一些资料,结合自己的解决方法及解决过程总结了下,方面以后查阅.如果能帮到同样遇到这个问题的你,将非常高兴哦~_~ 由于asp.net中的Image控件是在Syst ...

  5. Winform中datagridview显示数据时,不显示特殊符号,如下划线不显示问题

    问题描述: Winform中datagridview显示数据时,不显示特殊符号,如下划线不显示问题 解决问题: 当遇到datagridview单元格数据不显示带有下划线的符号时,是字体设置问题,我们可 ...

  6. html中img显示图片的两种常用方式

    html中img显示图片的两种常用方式 显示图片,尤其是二维码的时候,大都是自动生成的,所以就需要能够从后台返回字符串,前台浏览器进行解析.好了,下面是这两种方式. 1. <img src=&q ...

  7. matlab 中图的大小_关于matlab绘图中字体及图片大小等的设置

    关于 matlab 绘图中字体及图片大小等的设置 1. 设置坐标轴上下限: axis([xmin,xmax,ymin,ymax]); 2. 设置图片大小: set(gcf,'Position',[x1 ...

  8. Vue单文件中引入背景图片时,四周有空白的问题

    Vue单文件中引入背景图片时,四周有空白的问题 问题背景 初始引入背景图 更新后的背景图设置 问题背景 近期公司有个管理系统前后端分离,但是前端人员不够,只能我们后端来凑,而在前端的开发过程中总是遇到 ...

  9. android中如何显示图片的一部分

    android中如何显示图片的一部分 分类: Android应用开发系列教程 Android应用开发技巧 2012-04-25 23:42 1728人阅读 评论(0) 收藏 举报 androidmat ...

最新文章

  1. Log4J xml配置
  2. slack 国内 android,使用Slack Api登录,Android
  3. ajax学习第一天。
  4. 数据采集串口通信系统verilog设计和仿真
  5. RHCS集群原理概述
  6. SpaceX载人龙飞船两名宇航员成功进入国际空间站
  7. 盘一盘 Spring 核心技术之依赖注入 | 原力计划
  8. java整合jdbc数据库连接工具(项目亲测)
  9. Iometer存储测试工具参数说明- 2 Access Specifications
  10. 磁共振影像分析之: 基于FSL的VBM分析(1)
  11. 遗传算法bp神经网络原理,bp神经网络 遗传算法
  12. dos批处理命令注释_如何在批处理文件MS-DOS中写注释块?
  13. 微信小程序云开发--上传图片到云存储获取并展示云存储里的图片
  14. 【Ubuntu系统下百度Apollo7.0与LGSVL2021.3联合教程(亲测有效)】
  15. java BMI指数计算
  16. 移动电源有哪些产品?热门的移动电源推荐
  17. 米家接入HomeKit系列四:HomeBridge搭建、配置与接入米家设备
  18. 计算机基础课程听课记录,听课记录-计算机应用基础
  19. 网页开发学习(一):制作一份邀请函
  20. 金融直播的引流小技巧

热门文章

  1. Android预优化那些事
  2. Android表格布局(Table Layout)
  3. php叠加纹理,ps光斑纹理曝光视觉特效叠加合成扩展-ps光斑纹理叠加合成扩展 - 极光下载站...
  4. AppLaunchScreen/Screenshot(启动图/屏幕快照)输出规范
  5. QLoo推出用于现有服务的GraphQL接口
  6. 使用Troll对ARM Cortex-M处理器进行系统内核调试
  7. 安装最新版本的ReSharper导致原生全局搜索工具的消失问题
  8. Python一些字符串判断和转换
  9. Spring – ${} is not working in @Value--转载
  10. 《统计学习方法》读书笔记(1)---学习的要素