1、直方图绘制
matrix=Yours;
h=hist(matrix(:),256);horz=min(matrix(:)):(max(matrix(:))-min(matrix(:)))/255:max(matrix(:));
bar(horz,h);
如图:
绘制拉普拉斯分布和高斯分布:
x=-10:0.05:10;
y=1/sqrt(2)/1*exp(-sqrt(2)/1*abs(x)); %拉普拉斯
y2=1/sqrt(2*pi)*exp(-x.*x/2); %高斯
plot(x,y);
plot(x,y2);
先获得了拉普拉斯分布图:
然后,我们获得了高斯分布图:
2、将向量重新排成图像(注意下面提到的left其实是从right中每列每列取数据的,可能就是跟其它语言的内存模式还不一样)
我们知道这样的代码会产生一个向量:(right为512*512矩阵)
left = right(:);
那么,将left进行运算之后怎样再变成二维的图像输出呢?
实验性地试了下:
tmptry=right; %给tmptry一个模板,让他知道自己至少长成什么样的轮廓
tmptry(:)=left;
imshow(tmptry,[]); %Congratulations!You are good man!
没想到居然成功了,MATLAB真的是太强大了,哈哈。
然而,这样的代码却无法成功(Opps!):
tmptry[];
for xi=1:1:size(right,1)
tmptry=[ tmptry; left(xi:size(right,1):end)] ;
end
3、mesh相关
直接将2D矩阵画成三维图:
figure,mesh (sigma);
生成矩阵(x,y)坐标:
[x y]=[x y]=meshgrid(1:width,1:height);
4、Figure/gcf 保存成图片的正确姿势
最近在通过saveas(gcf,filename)保存figure中的图像时,发现保存成的图像宽高比与figure实际显示的不一样,而且不论怎么调整figure大小,保存后的图像宽高比都是固定的一个值。
造成这种问题的可能原因是,saveas实际访问的是figure的底层图像,比如是在onpaint之前的,而不是onpaint之后的图像。
而通过如下方法,就能够使得保存后的图像与figure中实际显示的一致了(引自 http://blog.sina.com.cn/s/blog_4a1853330101eboh.html):
f = getframe(gcf); %# Capture the current window
imwrite(f.cdata,'image2.jpg'); %# Save the frame data
这种方法能够获取与实际显示的图像在于getframe函数直接访问了gcf呈现给window的图像(这种方式类似于截屏),而不是gcf自有的底层图像。
5、在figure中添加图例
通过legend(str1,str2,.....)实现,
也可以类似于legend(M)这样传递一个数组,其支持普通数组和cell两种,最好通过cell,因为当每个图例描述文字长度不一时,构造普通数组时会报错,而cell不会。
其它一些资料:
http://www.ilovematlab.cn/thread-13240-1-1.html
http://www.ilovematlab.cn/thread-263918-1-1.html
6、绘制坐标轴箭头
在网上看到一些例子,箭头的坐标是固定的,有时候绘制出来不能对齐真实的坐标轴,
为了自适应figure里绘图区的位置和尺寸,需要先获取绘图区的xywh:
arrow_p = get(gca,'position');
annotation('arrow',[arrow_p(1) arrow_p(1)],[arrow_p(2)+arrow_p(4) 1]); %画Y轴箭头
annotation('arrow',[arrow_p(1)+arrow_p(3) 1],[arrow_p(2) arrow_p(2)]); %画X轴箭头
相关资料:
http://www.ilovematlab.cn/thread-118735-2-1.html
7、清除figure图像
有时候需要清除figure中显示的所有内容,但是又不想重新开一个figure,毕竟Java runtime memory有限是不~通过该代码就可以实现:clf;
对,f代表了figure,而换成a就可以清除坐标轴(axes)上的内容了。