MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7180|回复: 40|关注: 0

[已解决] 道一幅RGB图像,在matlab想把每个R,G,B的值作为三维坐标x,y,z,...

[复制链接]

新手

13 麦片

财富积分


050


3

主题

28

帖子

0

最佳答案
知道一幅RGB图像,在matlab想把每个R,G,B的值作为三维坐标x,y,z,在三维坐标系中显示出每个像素点点。>> fn = 'H.jpg';     % 换成自己的RGB图像
p = imread(fn);
pp = double(p);
x = pp(:,:,1);    % R
y = pp(:,:,2);    % G
z = pp(:,:,3);    % B
plot3(x(:),y(:),z(:),'r.');
grid on
本来这样出来的图是这样的散点图

                               
登录/注册后可看大图

但是现在我只要其中的R值,就是以图片中的每个像素点位置为横纵坐标,然后以R值为Z轴坐标,这样应该怎么编码啊?求各位帮助一下啊?

MATLAB 基础讨论
版块优秀回答者

中级

522 麦片

财富积分


5001500


8

主题

571

帖子

95

最佳答案
  • 关注者: 19
发表于 2017-7-5 18:41:29 | 显示全部楼层
l1 l2是length()求的像素点长宽数量;
x=1:l1;y=1:l2;
[X,Y]=meshgrid(x,y);
plot3(X,Y,p(:,:,1),'r.')

新手

13 麦片

财富积分


050


3

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-7-6 08:35:53 | 显示全部楼层
悟得 发表于 2017-7-5 18:41
l1 l2是length()求的像素点长宽数量;
x=1:l1;y=1:l2;
[X,Y]=meshgrid(x,y);

不好意思啊,用你这个代码出不来东西,能不能写一下完整的代码,老说没有定义L1谢谢 ~

MATLAB 基础讨论
版块优秀回答者

中级

522 麦片

财富积分


5001500


8

主题

571

帖子

95

最佳答案
  • 关注者: 19
发表于 2017-7-6 10:41:19 | 显示全部楼层 |此回复为最佳答案
本帖最后由 悟得 于 2017-7-6 10:45 编辑
Kathy-cat 发表于 2017-7-6 08:35
不好意思啊,用你这个代码出不来东西,能不能写一下完整的代码,老说没有定义L1谢谢 ~ ...
  1. p=imread('timg.jpg');%我读的我的头像图片

  2. l1=length(p(:,1,1));l2=length(p(1,:,1));
  3. x=l1:-1:1;y=1:l2;

  4. [X,Y]=meshgrid(x,y);
  5. plot3(X,Y,p(:,:,1),'k.')
复制代码
1.png 2.png
timg.jpg
最后一张是原图,虽然图片是黑白的,但是我是以RGB方式读的,读出来是一个三维矩阵,和你要求是一样的,我读单色的主要是为了能看出来和原图的关系。




新手

13 麦片

财富积分


050


3

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-7-7 08:55:14 | 显示全部楼层
悟得 发表于 2017-7-6 10:41
最后一张是原图,虽然图片是黑白的,但是我是以RGB方式读的,读出来是一个三维矩阵,和你要求是一样的, ...

哇~非常感谢。太谢谢了,那你这个读的是RGB值中的哪个值呢?如果我想以G值为Z轴需要重新定义哪个代码呢?

MATLAB 基础讨论
版块优秀回答者

中级

522 麦片

财富积分


5001500


8

主题

571

帖子

95

最佳答案
  • 关注者: 19
发表于 2017-7-7 09:10:04 | 显示全部楼层
plot3(X,Y,p(:,:,1),'k.')中p(:,:,1)就是R啊,p(:,:,2)就是G。
正常你读完一个图是p(行像素个数,列像素个数,R或G或B通道)。%行列可能颠倒了,matlab一般就是先行后列,你自己试试。

新手

13 麦片

财富积分


050


3

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-7-7 09:34:43 | 显示全部楼层
悟得 发表于 2017-7-7 09:10
plot3(X,Y,p(:,:,1),'k.')中p(:,:,1)就是R啊,p(:,:,2)就是G。
正常你读完一个图是p(行像素个数,列像素个 ...

恩恩 好的~谢谢啦

新手

13 麦片

财富积分


050


3

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-7-7 09:46:45 | 显示全部楼层
悟得 发表于 2017-7-7 09:10
plot3(X,Y,p(:,:,1),'k.')中p(:,:,1)就是R啊,p(:,:,2)就是G。
正常你读完一个图是p(行像素个数,列像素个 ...

再打扰一下哈~如果我吧rgb换成hsb值呢?(能不能顺便推荐本关于这些的书籍?真的炒鸡感谢~)

MATLAB 基础讨论
版块优秀回答者

中级

522 麦片

财富积分


5001500


8

主题

571

帖子

95

最佳答案
  • 关注者: 19
发表于 2017-7-7 10:52:18 | 显示全部楼层
还是三层的矩阵,只是每层意义不一样了。每层分别是H、S、V。
a=imread('图片.jpg');
hv=rgb2hsv(a);
H=hv(:,:,1);
S=hv(:,:,2);
V=hv(:,:,3);
figure;
subplot(1,3,1);imshow(H);title('HSV空间H分量图像');
subplot(1,3,2);imshow(S);title('HSV空间S分量图像');
subplot(1,3,3);imshow(V);title('HSV空间V分量图像');

MATLAB 基础讨论
版块优秀回答者

中级

522 麦片

财富积分


5001500


8

主题

571

帖子

95

最佳答案
  • 关注者: 19
发表于 2017-7-7 11:00:28 | 显示全部楼层
Kathy-cat 发表于 2017-7-7 09:46
再打扰一下哈~如果我吧rgb换成hsb值呢?(能不能顺便推荐本关于这些的书籍?真的炒鸡感谢~) ...

至于书籍应该任何一本图像处理的书都会有。
matlab本身相对闭源,我觉的从理论开始学习意义不大。而且m语言这种为用户提供大量的函数,牺牲了很多时空复杂度来降低编程难度,学习matlab语法相对容易,我建议从项目开始学习,做项目的过程中熟练语法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表