关于MATLAB中imagesc函数图像保存的问题

这几天我在搞用contourlet变换来做图像融合。

期间,遇到了一个问题,就是将得到的多层矩阵用contourlet反变换后,得到的不是一个正规的图片矩阵,就是每个像素点灰度值大小都在0~255之间,这个矩阵像素点的灰度值有的大于了255,有的小于了0。当直接用imshow()函数来显示这个矩阵的时候,在figure窗口中画出来的完全不是一张正常图片,而是白白的一片,底部有些黑色的东西。

我查看了contourlet工具包里的各种文档说明,参考工具包里的demo程序,使用imagesc(I,[0,255])语句可以将这个矩阵显示为一张图片了,但是颜色很诡异,有点像美图秀秀加的效果,而且图像的大小也被压缩。后来查阅资料,发现imagesc()这个函数,本来就是将图片压缩后再显示的。之后添加colormap(gray);axis image;语句可以将图片显示为正常的灰度图像,图像的大小也恢复了本来面目。

那么现在问题来了,怎样将这张图片保存,然后将其用到我的其他测试函数中,来比较图像融合的效果呢?

在网上一直都找到解决方法,不过现在我已经解决这个问题啦!

其实使用imshow(I,[255])就可以将这个矩阵以正常的图片显示,而且不会像imagesc()函数有压缩图片这个副作用。同样还是上面的问题,但是怎样将figure窗口里的图片保存呢?

我参看了一下imshow()的实际函数过程,其实就是将灰度值大于255或小于0的像素直接分别修改成了255和0.那么我自己写了一个函数,对最初的矩阵进行了处理,通过遍历矩阵中的每一个像素点,将这个矩阵中灰度值大于255或小于0的像素的值直接分别修改成了255和0,得到一个新的矩阵,就是我想要的图像。

但是我之后直接用imshow(I)函数显示这个矩阵,又是一片大白。

其实还有把这个矩阵用uint8(I)变换一下,最后得到的矩阵,再用imshow(I)直接显示,就一切正常啦!

然后再用imwrite()语句保存一下这个矩阵,就得到可以用于下一步操作的图片啦!

脱水版:

step1:用imagesc(img,[l,h])显示一张图片,想保存。

step2:写一个遍历矩阵中所有像素的函数,将灰度值小于l的修改为0,将灰度值大于h的修改为255。得到矩阵img

step3:imgfinal = unit8(img).

step4:imwrite(imafinal,‘final.jpg‘,‘jpg‘)

时间: 2024-10-23 20:21:22

关于MATLAB中imagesc函数图像保存的问题的相关文章

Matlab中plot函数全功能解析

Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)h = plot(...)hlines = plot('v6',...) 描述 plot(Y)如果Y是m×n的数组,以1:m为X横坐标,Y中的每一列元素为Y坐标,绘制n条曲线:如果Y是n×1或者1×n的向量,则以1:n

matlab 中max函数用法

Matlab中max函数在矩阵中求函数大小的实例如下:(1)C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值. 如果A是多维数组,max(A) treats the values along the first non-singleton dimension as vectors, returning the maximum v

matlab中fspecial函数

fspecial函数 用于建立预定义的滤波算子,其语法格式为: h = fspecial(type) h = fspecial(type,para) 其中type指定算子的类型,para指定相应的参数: 2type的类型有 'average' averaging filter 为均值滤波,参数为hsize代表模板尺寸,默认值为[3,3]. H = FSPECIAL('average',HSIZE) returns an averaging filter H of size HSIZE. HSIZ

【原创】Matlab中plot函数全功能解析

[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)h = plot(...)hlines = plot('v6

几何画板中作函数图像的几种方法

随着社会的发展,现代教学很多的地方都有了多媒体教学,这就需要一些教学软件的辅助了,几何画板就是其中之一.一些老师在使用几何画板的过程中,常常涉及到函数图象的绘制.因此,很多用户对这方面教程是非常的感兴趣的.下面就给大家分享一下几何画板中作函数图像的几种方法? 一.直接法 例1  画函数y=sinx在R上的图象. 操作步骤:单击“图表”菜单下“绘制新函数”f(x)=sinx. 二.轨迹法 例2  画函数y=(1/4)x^2在区间[-2,3]上的图象. 操作步骤: (1)单击“绘图”菜单下“绘制点”

matlab中norm函数的用法

格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释 NORM   Matrix or vector norm. For matrices... NORM(X) is the largest singular value of X, max(svd(X)). NORM(X,2) is the same as NORM(X). NORM(X,1) is the 1-norm of X, the l

Matlab中intlinprog函数的用法总结

Matlab中 intlinprog函数用法简介 1.简介 intlinprog是matlab中用于求解混合整数线性规划(Mixed-integer linear programming)的一个函数,用法基本和linprog差不多 Matlab中,该模型的标注写法如下 \[ min\ f\,^Tx\;\; \s.t. \begin{equation} \left\{ \begin{array}{**lr**} x(intcon)\ are \ integers \ A \cdot x \leq

Matlab中imagesc用法

来源:https://ww2.mathworks.cn/help/matlab/ref/imagesc.html?searchHighlight=imagesc&s_tid=doc_srchtitle imagesc 显示使用经过标度映射的颜色的图像 全页折叠 语法 imagesc(C) imagesc(x,y,C) imagesc('CData',C) imagesc('XData',x,'YData',y,'CData',C) imagesc(___,Name,Value) imagesc(

MATLAB中cell函数用法

cell元包是matlab中提供的一种数据类型,功能强大. 关于cell的创建: 1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]"改成了}"{}" 2.使用cell创建cell,C= {C1 C2},这里C1和C2都是cell类型,直接把C1 C2作为一个cell得到的C3是一个1x2的cell数组:使用C3 = [C1 C2],是使用C1和C2的内容来创建cell数组 3.使用cell函数,A=cell(2,2),创建一个空的