如何转换一个矩阵到一个灰度图像?

255次浏览(最近30天)
维
2012年3月1日
评论道: 图像分析 2016年3月23日
我需要一个矩阵(值在0到255之间)被转换为a 灰度 的形象。我试过使用这个函数 mat2gray 但与此功能的问题是,它按比例缩小的范围内的图像的像素值 0到1 .虽然显示了正确的图像,但是矩阵的精确值(0-255)没有反映在图像中。我的要求是图像的像素必须与对应矩阵的像素值相同。我只是想知道对于这个问题是否有其他的解决方案。 好心的帮助

2的评论

nalan karunanayake
nalan karunanayake 2015年4月12日
你的矩阵
> > imshow (A, 255年[0])
图像分析
图像分析 2015年4月12日
这就是我在我的答案已经说了,但由于维卡斯从未接受它,我想这既没有做什么,他想做的事,或者他只是再也没有回来这里,看看谁花时间来回答他的问题。

登录并发表评论。

答案(8)

图像分析
图像分析 2012年12月7日
您的矩阵已经是一个灰度图像。显示它使用这个:
imshow (yourMatrix []);
[]允许将最小值缩放为0,最大值缩放为255。如果你不想这样缩放,那就用吧
imshow (yourMatrix, 255年[0]);
这不会做任何缩放,所以如果你的最小值是100,它会显示灰度值为100,而不是像[]那样显示灰度值为0。
你看到的全是白色的原因是如果图像的类是单的或双的,那么MATLAB期望图像在0-1的范围内。0变为0 1变为255。因为你的值都是大于1的浮点值,它们都被剪到255。您可以使用im2double()或gray2mat()将图像缩放到0-1范围,或者只使用[]和imshow(),而不用担心它—我就是这么做的,这是最简单的方法。
最后一种方法是在调用imshow之前将你的图像投射到uint8:
imshow (uint8 (yourImage), 255年[0]);
请运行和理解这个演示:
clc;清除命令窗口。
关闭所有;关闭所有图形(imtool除外)
imtool关闭所有;关闭所有imtool图形。
清晰;%擦除所有现有变量。
工作空间;%确保显示工作区面板。
格式longg;
格式紧凑的;
字形大小= 20;
读取一个标准的MATLAB灰度演示图像。
文件夹= fullfile (matlabroot,“\工具箱\ \ imdemos图像”);
baseFileName ='pout.tif';
%获取完整的文件名,前面加上路径。
fullFileName = fullfile(文件夹,baseFileName);
检查文件是否存在。
如果~存在(fullFileName“文件”)
文件不存在——没有找到它。检查它的搜索路径。
fullFileName = baseFileName;这次没有路径。
如果~存在(fullFileName“文件”)
仍然没有找到它。提醒用户。
errorMessage = sprintf ('错误:搜索路径文件夹中不存在%s ', fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
grayImage = imread (fullFileName);
%获取图​​像的尺寸。
%色带数量= 1。
[rows columns numberOfColorBands] = size(灰度图像);
%显示原始灰度级图像。
次要情节(2 2 1);
imshow (grayImage []);
标题(的原始灰度图像,“字形大小”、字形大小);
将图形放大到全屏。
集(gcf,“单位”,“归一化”,“outerposition”,[0 0 1]);
%为标题栏指定名称。
集(gcf,'名称',“由ImageAnalyst演示”,“numbertitle”,“关闭”)
%创建一个在0-255范围内的双类图像
dblImage =双(grayImage);
%显示双图像缩放最小为0,最大为255。
次要情节(2,2,2);
imshow (dblImage []);
标题(“双灰度图像”,“字形大小”、字形大小);
显示双重图像,没有强度缩放。
次要情节(2、2、3);
imshow (dblImage, 255年[0]);
标题(“双灰度图像”,“字形大小”、字形大小);
%创建的范围内的双级图像0-1
dblImage2 = im2double (grayImage);
%显示双图像缩放最小为0,最大为255。
次要情节(2、2、4);
imshow (dblImage2 []);
标题(“0-1范围内的双灰度图像”,“字形大小”、字形大小);

4条评论

显示 1年长的评论
图像分析
图像分析 2013年4月18日
太好了。很高兴对你有帮助。维卡斯还没有接受任何答复,所以我想这对他来说还是个悬而未决的问题。
paramveer sran
paramveer sran 2015年10月22日
如果我们把这个图像写成imwrite(A,'img1.png');和then open the image as img2=imread('img.png'); imshow(img2).the output image show the edges only.how to write the image which was displayed by using imshow(A,[])

登录并发表评论。


乔纳森·沙利文
乔纳森·沙利文 2012年3月1日
M =兰迪(255,[1E3 1E3]);%你的矩阵
图像(M);
colormap (“灰色”)

2的评论

维
2012年3月1日
通过这样做,图像不显示(我只是得到一个白色的图像)。但是当我使用impixelregion函数来查看像素值时,我可以看到0-255范围内的值。然而,这与原来的矩阵并不匹配。
沃尔特·罗伯森
沃尔特·罗伯森 2012年3月1日
应该是
颜色表(灰色)

登录并发表评论。


沃尔特·罗伯森
沃尔特·罗伯森 2012年3月1日
是具有鲜明的颜色平面原来的矩阵RGB?如果是这样的话就没有办法让它灰度 保留原始像素值。
如果你的原始矩阵是RGB,其颜色平面都是相同的,那么取任意一个颜色平面。

1评论

维
2012年3月1日
这个矩阵基本上包含0到255的值。如果我要把它转换成一幅图像它必须是一幅灰色的图像。

登录并发表评论。


杨
2012年3月1日
矩阵[M,N],[M,N,3],[M,N,O]?

尤尔根•
尤尔根• 2012年12月6日
它可能加倍。所以,做im2uint8(A)或UINT8(A)如果A是矩阵。如果您也可以使用imshow,而不是图像。

0评论

登录并发表评论。


总管Hieu
总管Hieu 2014年12月4日
我有一个200x200的矩阵。格式-ASCII,。dat或。txt格式。如何转换成图像进行处理?谢谢大家!

1评论

Chathu
Chathu 2014年12月4日
Hieu-继续并把你的问题作为一个新的。你可以简单地这样做,如果你滚动这个页面,点击“问一个问题”,然后问你的问题。

登录并发表评论。


paramveer sran
paramveer sran 2015年10月22日
如果我们把这个图像写成imwrite(A,'img1.png');和then open the image as img2=imread('img.png'); imshow(img2).the output image show the edges only.how to write the image which was displayed by using imshow(A,[])

1评论

图像分析
图像分析 2015年10月22日
请开始你自己的新的,单独的讨论。

登录并发表评论。


pavithra白
pavithra白 2016年3月23日
如何在matlab中显示灰度图像的矩阵

标签

下载188bet金宝搏