[转载]matlab中pcolor绘图“少画一行”的问题

本文是关于matlab pcolor函数(slice,surf函数的情况与这个类似)绘图的问题的一些解决方案,在此记录备用

经 常处理三维(或者四维)数据体的同学们大概大多数都用过matlab里面的pcolor(slice)之类的函数,可能有人注意到过本文中的这类情况,即 本来要是画一个N×N的数据体,结果却画出来一个(N-1)*(N-1)的东西,我是一直都没有注意到这个情况,直到近日有人问我这个问题……示例代码如 下:
%一个简单的matlab 脚本,用pcolor画色块图,本意是得到一个20*20的色块图:
x=0:19;
y=0:19;%注意这里有20个点
[xx,yy]=meshgrid(x,y);
data=sqrt(xx.^2+yy.^2);
figure;
hold on;
h=pcolor(xx,yy,data);
plot(x,y,'r+');
colorbar;
axis tight;
hold off;
 
注意实际上只得到了19*19的色块(无聊的人可以数一下……),这又是为什么呢?输入的xx,yy和数据明明都是20*20的……

咳……实际上pcolor的默认的输入参数xx,yy在绘图的时候是直接输出给句柄中的xdata和ydata参数的,
有兴趣的人可以尝试输入命令(在上面那串之后):
get(h,’xdata’)
get(h,’ydata’)
会发现和xx,yy的值是完全一样的,而xdata和ydata的用途并非是确定色块的位置坐标,而是确定网格(实际上是那些黑色的网格线的节点)的位置坐标!这样一来,就不难明白为什么20*20的坐标只会生成19*19个网格了。(什么,不明白?想一想为什么一条线段(网格)有两个节点……笑)
而给定的色块的颜色变量存储在句柄的cdata参数中,尝试:
get(h,’cdata’)
可以发现它和data变量的值也是完全相同的,有20*20个,这样一来问题就出现了,有20*20个颜色变量,却只有19*19个位置可以显示,所以matlab只能舍去最后的一行和一列不显示了……

那么解决办法是?
既然给出20×20个坐标只能显示19×19,那么想显示出20×20个色块就只有给出21×21个坐标了(没有技术含量的做法……),如:

X=0:20;
Y=0:20;%注意这里有21个点
[XX,YY]=meshgrid(X,Y);
data2=data;%复制之前的数据
data2(21,:)=data2(20,:);%复制最后一行的值到21行上
data2(:,21)=data2(:,20);%复制最后一列的值到21列上
figure;
hold on;
pcolor(XX,YY,data2);
plot(X,Y,'r+');
colorbar;
axis tight;
hold off;
 
这样就可以全部显示了……需要注意的是,由于最后一行和最后一列(这里是21)的颜色实际上是不能显示的,所以设成什么值其实都没关系……
然而对于完美主义者们来说这还不够……注意到图中的红色“+”了吗,那是x,y的坐标位置,也就是网格的中心“应该在”的位置,由于前面所说的xdata,ydata的性质,每个网格的位置实际上是向右和向上恰好各偏了半个网格,不太符合一般的看图习惯。

解决的方法同样没有技术含量:改坐标……
X=-0.5:19.5;
Y=-0.5:19.5;%X,Y各偏半个网格……这样网格的中心恰好在0:19上。
[XX,YY]=meshgrid(X,Y);
data2=data;
data2(21,:)=data2(20,:);
data2(:,21)=data2(:,20);
figure;
hold on;
pcolor(XX,YY,data2);
plot(x,y,'k+');
colorbar;
axis tight;
hold off;

这样就好了……slice和surf函数也有类似的问题,解决方法也类似,这里不再赘述。

本文节选自:http://hi.baidu.com/tdmxb/item/a43d5642c6e309ae61d7b93a
引用地址:http://hi.baidu.com/tdmxb/item/a43d5642c6e309ae61d7b93a

灰度图Matlab的更多相关文章

  1. caffe matlab 借口怎么提取灰度图的 feature ? What happened if I mixed the color images with gray images together for training ?

    1. caffe matlab 接口提供了提取feature的脚本,但是由于中间要对这些图像进行RGB ---> BGR 的变换,卧槽,灰度图没有三通道啊?怎么破?从上午就在纠结怎么会跑着跑着程 ...

  2. Matlab 如何/怎样 读取图片 显示图片 转换成灰度图

    % 读取图片 im = imread('路径') >> im = imread('ny.png'); % 显示图片 imshow(im) >> imshow(im) % 转换成 ...

  3. 【python】RGB图片到灰度图的转换

    在做立体匹配求深度图的时候遇到这个问题,用惯了matlab的rgb2gray,倒是不熟悉python的实现,在网上找到了相关方案,记下来已作备用 RGB到灰度图转换公式: Y' = 0.299 R + ...

  4. 图像处理基础---RGB图 灰度图 索引图 调色板

    (1)二进制图 在二进制图中,像素的取值为两个离散数值0或1中的一个,0代表黑色,1代表白色 例 A=[0 0 1;1 1 0; 0 0 1];>> imshow(A,'InitialMa ...

  5. C#机器视觉入门系列1-转化为灰度图&&3*3模糊

    这是我入门机器视觉的系列学习经验之开篇,本来想着依靠opencv快速实现一些功能,但是想了一下既然是学数学的,还是应该自己多算算,写一些自己理解的东西才好. 入门篇很简单,就只是实现了转化成灰度图以及 ...

  6. Android-将RGB彩色图转换为灰度图

    package com.example.yanlei.wifi; import android.graphics.Bitmap; import android.graphics.BitmapFacto ...

  7. QImage Color Convert to Gray 转为灰度图

    在Qt中,我们有时需要把QImage类的彩色图片转为灰度图,一开始我想的是用QImage的成员函数convertToFormat(),但是试了好多参数,返现转化的图片都有问题,不是我们想要的灰度图,如 ...

  8. 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

      分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...

  9. 从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中

    //从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中 //作者:sandy //时间:2015-10-10 #inclu ...

随机推荐

  1. 初学Python——集合及其运算

    一.集合定义及其功能 集合是一个无序的.不重复的数据组合,和字典列表一样也是一种数据类型. 集合两个最主要的功能:①去重(把一个列表变成集合,就自动去重了) ②关系测试(测试两组数据之间的交.并.差集 ...

  2. B. Alyona and a tree

    二分+dfs序+前缀和+瞎几把yy #include "a.h" int n; aLL a; struct edge { int to, nx, w; } e[N << ...

  3. C# - Span 全面介绍:探索 .NET 新增的重要组成部分

    假设要公开特殊化排序例程,以就地对内存数据执行操作.可能要公开需要使用数组的方法,并提供对相应 T[] 执行操作的实现.如果方法的调用方有数组,且希望对整个数组进行排序,这样做就非常合适.但如果调用方 ...

  4. Windows下安装RabbitMQ报错:unable to perform an operation on node时的解决方案

    在计算机领域中,想要程序完成各种功能,那么数据的交流和计算是非常重要的.现在已知的程序动作机制有协程,线程和进程. 在同一个程序中,或者说同一个进程中,数据的交流,传递,计算是非常的简单,只要把相关数 ...

  5. DIV CSS float浮动

    一.浮动? #CSS样式的float浮动属性,用于设置标签对象(如:<div>标签盒子.<span>.<a>.等html标签)的浮动布局. #通过定义浮动(floa ...

  6. Spring+Struts2+Hibernate框架整合流程

    一:基本步骤 新建Maven项目,导入相关依赖(推荐) 在WEB-INF的web.xml中进行配置 ————–Hibernate配置 —————- 创建entity包,创建数据库相关实体类 根据实体类 ...

  7. Linux系统多网卡环境下的路由配置

    Linux下路由配置命令 1. 添加主机路由 route add -host 192.168.1.11 dev eth0 route add -host 192.168.1.12 gw 192.168 ...

  8. 教你使用HTML5原生对话框元素,轻松创建模态框组件

    HTML 5.2草案加入了新的dialog元素.但是是一种实验技术. 以前,如果我们想要构建任何形式的模式对话框或对话框,我们需要有一个背景,一个关闭按钮,将事件绑定在对话框中的方式安排我们的标记,找 ...

  9. Python-可变参数和关键字参数(*args **kw)

    前言: Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数. 可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple: **kw是关键 ...

  10. 全局关键字搜索:Element UI Table内容过滤\jQuery过滤器fastLiveFilter插件\BootstrapVue插件;

    ```html data:{ resultMaster: [], otableData:[], schfilter:'' } watch: { schfilter: function(val, old ...