【问题标题】:how to convert a 3x3 matrix to an RGB image in matlab如何在matlab中将3x3矩阵转换为RGB图像
【发布时间】:2014-08-29 20:40:22
【问题描述】:

假设我有以下代码:

clc
clear
band1 = imread('C:\Users\sepideh\Desktop\DrAkhundzadeh\Bands\band1.tif');
band2 = imread('C:\Users\sepideh\Desktop\DrAkhundzadeh\Bands\band2.tif');
band3 = imread('C:\Users\sepideh\Desktop\DrAkhundzadeh\Bands\band3.tif');
band4 = imread('C:\Users\sepideh\Desktop\DrAkhundzadeh\Bands\band4.tif');
band5 = imread('C:\Users\sepideh\Desktop\DrAkhundzadeh\Bands\band5.tif');
band7 = imread('C:\Users\sepideh\Desktop\DrAkhundzadeh\Bands\band7.tif');
Vegetation = band4-band3;
Oxide = band3-band1;
Hydroxyl = band5-band7;
%Normalize
NormalizedVegetation = ( Vegetation - min(min(Vegetation)))*255/(max(max(Vegetation)) - min(min(Vegetation)));
NormalizedOxide = ( Oxide - min(min(Oxide)))*255/(max(max(Oxide)) - min(min(Oxide)));
NormalizedHydroxyl = ( Hydroxyl - min(min(Hydroxyl)))*255/(max(max(Hydroxyl)) - min(min(Hydroxyl)));
FalseColor(:,:,1) = NormalizedVegetation;
FalseColor(:,:,2) = NormalizedOxide;
FalseColor(:,:,3) = NormalizedHydroxyl;
RGBIMAG = uint8(FalseColor);
imshow(RGBIMAG);  

我的问题在于这条线:

RGBIMAG = uint8(FalseColor);  

这会导致所有图像变暗。如何在不改变元素的情况下告诉 matlab 3 维矩阵的每个级别是 RGB 图像的不同波段。

【问题讨论】:

  • 提示:min(x(:))min(min(x)) 更易读(和写)
  • 我看不出你的代码有任何问题,它应该可以工作,我在我的机器上尝试了类似的东西。你不需要告诉 Matlab 什么,只要确保你的价值观是有意义的。 @Notlikethat 是对的,min(x(:)) 要好得多,但我会简单地使用 mat2gray,它更简单。
  • 好吧@Vadim 它不能正常工作。当我同时使用规范化部分和 uint8 时,一切都会变暗
  • 原始图像加载为什么数据类型?如果它是整数,您可能会在标准化步骤中得到饱和/截断,这会搞砸。 band1 = double(imread(... 等对事物有何影响?

标签: image matlab image-processing rgb


【解决方案1】:

要转换为 uint8,您必须使用:

RGBIMAG = im2uint8(FalseColor);

该函数接收您的双精度数组(值 btw 0-1)并将它们转换为范围 (0, 255) 内的 RGB 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多