关于matlab中的gray2ind函数

我想问gray2ind函数的原理是什么啊?我知道它是将灰度图像转成索引图像的,关键是怎么转的呢?gray2ind是如何实现这个转化的?跪求高人解释

依据Gray的数据类型得到Gray的范围。这里由于Gray是uint8的,所以范围是[0 255]。

取这个范围向量中的第二个值255;将Gray中的各像素值去乘以sf并取整,即可得到索引图Ind,如原来Gray中的值是156,那么乘以sf再取整就得到9。全部计算完毕后,可以看到Ind中的值都是0~15之间的。

索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值直接映射为调色板数值。调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。

扩展资料:

MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而且经过了各种优化和容错处理。

在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。

参考资料来源:百度百科-MATLAB

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-24
比如一幅256级的灰度图Gray,图中的各像素值是0~255。
那么变成一幅16级的索引图Ind时,图中的各值是0~15。

gray2ind具体的实现过程是:
1.首先依据Gray的数据类型得到Gray的范围。这里由于Gray是uint8的,所以范围是[0 255]。取这个范围向量中的第二个值255;
2.然后依据你所需要的索引数16,计算sf = (16-1)/255; 得到sf=0.0588。(这一步可理解为要将原图变为16个级别的索引,则需要将原图各值等分成15份,sf为等分的间隔);
3.将Gray中的各像素值去乘以sf并取整,即可得到索引图Ind。如原来Gray中的值是156,那么乘以sf再取整就得到9。全部计算完毕后,可以看到Ind中的值都是0~15之间的。追问

灰度图转索引图不是还同时生成了一个调色板么?请问这个调色板map是怎么来的呢?我是新手不好意思,问题比较多比较弱智,如果你不介意的话,可以给我QQ号么?

追答

比如这个代码:
I = imread('cameraman.tif');
[X, map] = gray2ind(I, 16);
imshow(X, map);

X就是最后的索引图,map就是色板。这里是将原图I由256级的灰度图变成16级的索引图。所以可以看到X中的值都是0~15,而0~15的计算过程参看上面的回答。

而对于色板,matlab中的色板是一个Mx3的矩阵,3表示rgb三个分量,每个分量的值是从0~1。
而对于上面的代码,由于生成了16级索引图,所以会将[0,1]的区间等间隔地分成16种变化,如下。
map =
0 0 0
0.0667 0.0667 0.0667
0.1333 0.1333 0.1333
0.2000 0.2000 0.2000
0.2667 0.2667 0.2667
0.3333 0.3333 0.3333
0.4000 0.4000 0.4000
0.4667 0.4667 0.4667
0.5333 0.5333 0.5333
0.6000 0.6000 0.6000
0.6667 0.6667 0.6667
0.7333 0.7333 0.7333
0.8000 0.8000 0.8000
0.8667 0.8667 0.8667
0.9333 0.9333 0.9333
1.0000 1.0000 1.0000
这样,显示图像的时候,X中的值是0的,其对应的颜色板rgb就是[0,0,0],值是15的,对应的颜色板rgb就是[1,1,1]。

总结一下,如果你需要将一个图由256级变成30级的索引图,主要是两步处理:
1、对于X,会按照之前的回答,计算sf = (30-1)/255,然后将索引图的值都是0~29.
2、对于MAP,会按照本次的回答,将0~1等间隔变成30种情况。

当然,你如果不希望使用gray2ind这种等间隔划分,也可以自己设计颜色板,比如:
I = imread('cameraman.tif');
[X, map] = gray2ind(I, 16);
map(:,2) = map(:,2).^2;
map(:,3) = sqrt(map(:,3));
figure,imshow(X,map);
上面r分量不变,g分量取平方,b分量开根号。会看到伪彩色。

第2个回答  2012-12-06
function [X, map] = gray2ind (I, n)

if (nargin < 1 || nargin > 2)
print_usage ();
elseif (nargin == 1)
n = 64;
endif

map = gray (n);

X = round (I*(n-1)) + 1;

endfunction本回答被网友采纳
第3个回答  2015-10-29
function [X, map] = gray2ind (I, n)

if (nargin < 1 || nargin > 2)
print_usage ();
elseif (nargin == 1)
n = 64;
endif

map = gray (n);

X = round (I*(n-1)) + 1;

endfunction
第4个回答  2015-11-22
使用rgb2ind函数,可以将载入的真彩色图像转换为索引图像。
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值直接映射为调色板数值。
调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。

关于matlab中的gray2ind函数
依据Gray的数据类型得到Gray的范围。这里由于Gray是uint8的,所以范围是[0 255]。取这个范围向量中的第二个值255;将Gray中的各像素值去乘以sf并取整,即可得到索引图Ind,如原来Gray中的值是156,那么乘以sf再取整就得到9。全部计算完毕后,可以看到Ind中的值都是0~15之间的。索引图像是一种把像素...

用MATLAB分别用ind2gray,ind2rgb,gray2ind以及rgb2gray函数进行转换...
[I,map]=imread(a);%a是索引图片 g=ind2gray(I,map);%索引变灰度 rgb=ind2rgb(I,map);%索引变rgb c=16;b=gray2ind(g,c);%灰度变索引,c是颜色数,可变 d=rgb2gray(rgb);%rgb变灰度

在matlab中图像灰度值如何实现三值化?甚至多值化?
gray2ind(I,n) 根据输入I的最大值最小值范围,平均分为n值图 如果要自己选域值,那么,只能一个个比较了

您好。我用gray2ind函数转换为伪彩色图像然后用imshow显示,为什么图...
matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。在matlab中,为了保证精度,经过了运算的图像矩阵A其数据类型会从unit8型变成double型。如果直接运行imshow(A),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时...

MATLAB实现小波变换边缘提取 程序哪里放要处理的图片名
从你的load wbarb; %小波变换边缘提取程序 I = ind2gray(X,map);%检索图转成灰度图 可以看出wbarb预先已经有了X和map 先确保你的lean业含有X和map参数,如果没有,可以试着先转换成索引图片,然后再运行该程序

matlab 小波分解,读入图像的问题,load与imread区别
其中转换代码有:gray2ind 将灰度图像转换成索引图像 grayslice 通过设定阈值将灰度图像转换成索引色图像 im2bw 通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图 ind2gray 将索引色图像转换成灰度图像 ind2rgb 将索引色图像转换成真彩色图像 mat2gray 将一个数据矩阵转换成一副灰...

如何利用matlab提取图像的频率信息
基于小波变换的多尺度图像边缘检测matlab源代码(在Matlab7.0下运行)clear all;load wbarb;I = ind2gray(X,map);imshow(I);I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1);[N,M] = size(I);h = [0.125,0.375,0.375,0.125];g = [0.5,-0.5];delta = [1,0,0...

matlab代码求注解,在线等
该函数可以把RGB图像转换成索引图像或把灰度图像转换成二值图像。 l gray2ind:灰度图像或二值图像向索引图像转换。 l grayslice:设定阈值将灰度图像转换为索引图像。 l im2bw:设定阈值将灰度、索引、RGB图像转换为二值图像。 l im2double:将图像数组转换为double型。 l im2uint8:将图像数组转换为uint8型。 l im2...

matlab求给代码注释,会多少给多少就行
load wbarb;%波变换边缘提取程序 I = ind2gray(X,map);%检索图转成灰度图 imshow(I); %显示转换后的灰度图 I1 = imadjust(I,stretchlim(I),[0,1]);%调整图像的像素值,可以改变对比度和颜色 figure;imshow(I1); %显示调整后的图像 [N,M] = size(I); %m:图像的宽度 n:图像的高度...

matlab函数文件中的错误
Ibw = im2bw(Igray,graythresh(Igray));%转化成二值 graythresh返回图像的阈值和阈值的有效性 Iedge = edge(uint8(Ibw));se = strel('square',3);Iedge2 = imdilate(Iedge, se);Ifill= imfill(Iedge2,'holes');[Ilabel num] = bwlabel(Ifill);Iprops = regionprops(Ilabel);Ibox =...

相似回答