用matlab显示图像的问题
%imshow(a)
x=size(a,1);
y=size(a,2);
result=zeros(x,y);
for index1=1:1:x
for index2=1:1:y
result(index1,index2)=a(index1,index2);
end
end
imshow(result)
我很郁闷啊 上面的程序就是把导入的图像从变量a复制到result 结果显示a能显示原图像 显示result结果不成图像 这是怎么回事啊 谢谢 展开
根据你的描述,提供两种方法,思路如下,你试试:
1、imshow(I/256); 将图像矩阵转化到0-1之间
imshow(I,[]); 自动调整数据的范围以便于显示
2、又或者将I的最小值看作0,最大值看作255,黑白明显
资料拓展:
1、MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
2、MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
资料来源:百度词条MATLAB
显示成Result的结果可能是你没有变换,需要对三个分量进行分类,要对彩色图像进行变换,result=a或者多进行几次循环,直到分别得到R、G、B,出现了灰度图像不要着急,因为你的彩色信息没有了,进行一次彩色转换就好了。下面是具体步骤:
第一步:a=imread('D:\ebook\lena.bmp');
第二步: R=a(:,:,1);
第三步:G=a(:,:,2);
第四步:B=a(:,:,3);
第五步: result(:,:,1)=R;
第六步: result(:,:,2)=G;
第七步: result(:,:,3)=B;
figure,imshow(a);
figure,imshow(result);
%%%%%%%%%%%%%%%%%%%%%%%%%
彩色图像在处理时如果你转化为了灰度图像后,最后的结果是显示不了彩色的,因为在转化时丢失了彩色信息。
如果你对彩色图像变换,那就把它的三个分量都分出来,依次进行操作,最后在合成彩色图像就行了。
下面是完成好了的复制彩色图像。
两个解决方法:
imshow(I/256); ----------将图像矩阵转化到0-1之间
imshow(I,[]); -----------自动调整数据的范围以便于显示 (不明白原理!)
PS:imshow(I,[]),将I的最小值看作0,最大值看作255,所以黑白明显
从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!不知什么原理!
此外还找到一些方法,还没有试过,记录如下:
uint8和im2uint8的区别
图像数据在计算前需要转换为double,以保证精度; 很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式. 如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8
如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255) 最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double)
另外,可以用isgray判断矩阵是否是一个图像数据矩阵
总之,im2uint8、im2double要跟uint8、double
恩 是这个问题 我用mat2gray(result)就解决了 但是输出颜色是灰的怎么解决