关于matlab中的gray2ind函数 5
我想问gray2ind函数的原理是什么啊?我知道它是将灰度图像转成索引图像的,关键是怎么转的呢?gray2ind是如何实现这个转化的?跪求高人解释...
我想问gray2ind函数的原理是什么啊?我知道它是将灰度图像转成索引图像的,关键是怎么转的呢?gray2ind是如何实现这个转化的?跪求高人解释
展开
5个回答
展开全部
依据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
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
展开全部
比如一幅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之间的。
那么变成一幅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分量开根号。会看到伪彩色。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
if (nargin < 1 || nargin > 2)
print_usage ();
elseif (nargin == 1)
n = 64;
endif
map = gray (n);
X = round (I*(n-1)) + 1;
endfunction
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
if (nargin < 1 || nargin > 2)
print_usage ();
elseif (nargin == 1)
n = 64;
endif
map = gray (n);
X = round (I*(n-1)) + 1;
endfunction
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用rgb2ind函数,可以将载入的真彩色图像转换为索引图像。
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值直接映射为调色板数值。
调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值直接映射为调色板数值。
调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询