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

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

问题描述

需求: 我想通过不同的颜色,在灰度图上直观显示所有不同误差的点,并有颜色条可以表示误差和颜色的对应关系。
存在的问题: 灰度图也发生了颜色的改变。代码如下:

% 读取 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;  % 关闭图像保持

修改后代码结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值