添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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

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

本文主要是两类数据用散点图作比较时候的绘制方法,自己做时候在加图例这一步骤上尝试了很多次,因而写本文做记录、分享。 绘制方法写在见面plotscattergscatter emmm,简要的写一个可以应用的背景哈(可能写的背景不很恰当(欢迎提改进意见哟),大家将就着瞅瞅,可以直接跳过看函数部分) 假设现在有神奇花和梦幻花两种花朵,在1-4月份的花朵直径都不同,现在想根据某两个直径差距区别较大的月份进行区别。 画散点图进行对比观察一下。 (PS:数据是随机数,所以效果啥样我也不晓得哈) 将`'your_image_file.jpg'`替换为你实际图片的路径。 2. **提取像素坐标**:如果你已经有了一组对应的像素值想要在图片上标注,你可以将它们作为散点的x、y坐标。如果没有,你需要创建一组随机或指定的坐标。 3. **创建散点图**:然后在图片上绘制散点,可以使用`scatter`函数,它接受两个向量作为输入,分别代表X轴和Y轴的位置。例如: ```matlab scatter(img(:, :, 1), img(:, :, 2), 'filled'); % 假设我们正在使用RGB通道的前两通道作为坐标 4. **修改图像属性**:为了使散点更明显,你可能需要调整颜色、大小或者其他视觉属性,比如: ```matlab hold on; % 保持当前绘图,不会覆盖原图 scatter(x_values, y_values, 50, 'red'); % 更改散点颜色和大小 5. **保存结果**: imwrite(img, 'image_with_scatter.jpg'); % 保存包含散点的新图片 记得,这里的例子假设你在处理的是彩色图片,并且散点的位置基于RGB通道。如果图片是灰度的,只需要第一个通道的像素即可。最后别忘了关闭图像窗口(`close all`),如果你不希望看到这个新打开的绘图窗口。