问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【MATLAB绘图】在灰度图上绘制带颜色的散点

创作时间:
作者:
@小白创作中心

【MATLAB绘图】在灰度图上绘制带颜色的散点

引用
CSDN
1.
https://m.blog.csdn.net/qq_42318500/article/details/134133923

问题描述

需求:我想通过不同的颜色,在灰度图上直观显示所有不同误差的点,并有颜色条可以表示误差和颜色的对应关系。

存在的问题:灰度图也发生了颜色的改变。代码如下:

% 读取 MATLAB 自带的图像 cameraman.tif
img = imread('cameraman.tif');
% 显示灰度图像
imshow(img, []);
hold on;  % 保持图像,准备叠加散点
% 示例数据:假设随机生成10个点的坐标和对应的误差
% 你可以根据实际数据替换这些值
num_points = 10;  % 假设有10个点
col = randi([1, size(img, 2)], num_points, 1);  % 随机生成列坐标 (X 方向)
row = randi([1, size(img, 1)], num_points, 1);  % 随机生成行坐标 (Y 方向)
error = rand(num_points, 1) * 10;  % 随机生成误差值,范围 [0, 10]
% 绘制散点图,点的颜色根据 error 值变化,使用 'filled' 填充点
scatter(col, row, 100, error, 'filled');
% 设置彩色映射(例如使用 jet colormap)
caxis([0,10]);colormap(jet);
% 添加颜色条,显示颜色与误差值的对应关系
colorbar;
% 设置图像坐标系反转,使得点的坐标与图像一致
set(gca, 'YDir', 'reverse');
% 设置轴标签
xlabel('Column (X)');
ylabel('Row (Y)');
% 设置标题
title('Error Distribution on Cameraman Image');
hold off;  % 关闭图像保持

解决思路

我的解决方法:将灰度图矩阵转换为三维矩阵,即可解决上述问题。修改后代码如下:

% 读取 MATLAB 自带的图像 cameraman.tif
img = imread('cameraman.tif');
img = repmat(img, [1,1,3]);
% 显示灰度图像
imshow(img, []);
hold on;  % 保持图像,准备叠加散点
% 示例数据:假设随机生成10个点的坐标和对应的误差
% 你可以根据实际数据替换这些值
num_points = 10;  % 假设有10个点
col = randi([1, size(img, 2)], num_points, 1);  % 随机生成列坐标 (X 方向)
row = randi([1, size(img, 1)], num_points, 1);  % 随机生成行坐标 (Y 方向)
error = rand(num_points, 1) * 10;  % 随机生成误差值,范围 [0, 10]
% 绘制散点图,点的颜色根据 error 值变化,使用 'filled' 填充点
scatter(col, row, 100, error, 'filled');
% 设置彩色映射(例如使用 jet colormap)
caxis([0,10]);colormap(jet);
% 添加颜色条,显示颜色与误差值的对应关系
colorbar;
% 设置图像坐标系反转,使得点的坐标与图像一致
set(gca, 'YDir', 'reverse');
% 设置轴标签
xlabel('Column (X)');
ylabel('Row (Y)');
% 设置标题
title('Error Distribution on Cameraman Image');
hold off;  % 关闭图像保持

修改后代码结果

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号