如何避免matlab图中矩形贴片元素的弯角?

时间:2013-08-05 20:39:16

标签: matlab graphics rendering

当我在matlab图中生成一组矩形块时,一些矩形边缘被渲染为弯曲或剪切而不是锐利,这是不需要的。这取决于比例,放大图像往往消除效果。我认为这可能与别名/压缩效果有关。奇怪的是,使用rectangle问题似乎消失了。

以下是中间放大倍率问题的一个例子(其他问题,如虚线边框,不应该有明显的):

enter image description here

代码来自另一个question的答案:

H=Hadamard(48); %# now to row-double the matrix 
A=(1+H)/2;
B=(1-H)/2;
C=[A; B]; %# the code below randomly permutes elements within the rows of the matrix 
[nRows,nCols] = size(C); 
[junk,idx] = sort(rand(nRows,nCols),2); %# convert column indices into linear indices 
idx = (idx-1)*nRows + ndgrid(1:nRows,1:nCols); %# rearrange whatever matrix 
E = C; 
E(:) = E(idx);
[X Y] = find(logical(E));
xl = length(X);
yl = length(Y);
figure, hold on
for ii=1:xl
     patch(X(ii) + [0 0 1 1],Y(ii) + [0.15 0.9 0.9 0.1],[1 1 1],'Edgecolor',[1 1 1])
end
axis([0 max(X)+1 0 max(Y)+1])
axis('square')
set(gca,'color',[0 0 0])
set(gca,'XTickLabel',[],'YTickLabel',[],'XTick',[],'YTick',[])

我的问题是: (1)是否有可能(以及如何)摆脱在所示示例中看到的弯曲角落和补丁对象的其他毛刺,在用于在屏幕上显示整个图形的低到中等放大倍数。 (2)最重要的是能够生成缺少弯角的图像文件(jpg,png,pdf ...)。我查看的所有格式似乎都可以保留不必要的效果。回答2使回答(1)基本上不重要,回答(1)可能解决(2)。

修改

由于在使用rectangle时问题消失了,这似乎是matlab渲染引擎的一个问题?注意:该示例是使用R14生成的,但链接到的问题的OP有类似的问题(matlab版本未知)。

我经历了可用于补丁对象的各种光照和边缘表示选项,但未观察到任何改进。

1 个答案:

答案 0 :(得分:0)

这个问题很可能重复,例如,here提出了类似的问题。

答案似乎是避免在绘制矩形时明确使用patch。请改为使用fillrectangle。就我所知,以下生成数字的方法提供了几乎相同的结果:

load had.mat % <-- load the data containing the matrix of interest in array E
[X Y] = find(logical(E));
xl = length(X);
yl = length(Y);
figure, hold on
for ii=1:xl
      rectangle('Position',[X(ii) Y(ii)+.2 1 0.8],'facecolor',[1 1 1],'edgecolor',[1 1 1])
%     fill([X(ii) X(ii) X(ii)+1 X(ii)+1], [Y(ii)+0.2 Y(ii)+0.8 Y(ii)+0.8 Y(ii)+0.2],[1 1 1],'edgecolor',[1 1 1],'marker','.','markersize',1)
end
set(gca,'color',[0 0 0])
set(gca,'XTickLabel',[],'YTickLabel',[],'XTick',[],'YTick',[])
set(gcf,'Renderer','zbuffer')