如何使从imagesc函数获得的图像边缘平滑

时间:2017-04-04 05:44:02

标签: matlab image-processing colors matlab-figure rgb

我有一个从保存imagesc功能获得的RGB图像,如下所示。如何细化/平滑图像中存在的边缘。

enter image description here

它由更锐利的边缘组成,我需要使它们平滑。我无法找到为RGB图像执行此操作的解决方案。而不是在图像中看到的阶梯效应,我想平衡边缘。请提前帮助谢谢。

3 个答案:

答案 0 :(得分:1)

也许imresize会对您有所帮助:

% here im just generating an image similar to yours
A = zeros(20);
for ii = -2:2
    A = A + (ii + 3)*diag(ones(20-abs(ii),1),ii);
end
A([1:5 16:20],:) = 0;A(:,[1:5 16:20]) = 0;
subplot(121);
imagesc(A);
title('original')
% resizing image with bi-linear interpolation
B = imresize(A,100,'bilinear');
subplot(122);
imagesc(B);
title('resized')

修改

这里我调整大小+过滤+舍入:

% generates image
A = zeros(20);
for ii = -2:2
    A = A + (ii + 3)*diag(ones(20-abs(ii),1),ii);
end
A([1:5 16:20],:) = 0;A(:,[1:5 16:20]) = 0;
subplot(121);
imagesc(A);
title('original')
% resizing
B = imresize(A,20,'nearest');
% filtering & rounding
C = ceil(imgaussfilt(B,8));
subplot(122);
imagesc(C);
title('resized')

enter image description here

答案 1 :(得分:1)

<强>溶液

使用imfilter和fspecial用高斯执行图像卷积。

zip

改变&#39; blurlevel&#39;参数(确定高斯内核大小)使图像更平滑或更清晰。

<强>结果 enter image description here

答案 2 :(得分:0)

如果您只是寻找更直的边缘,例如高程地图,您可以尝试contourf

cmap = colormap();
[col,row] = meshgrid(1:size(img,2), 1:size(img,1));
v = linspace(min(img(:)),max(img(:)),size(cmap,1));
contourf(col,row,img,v,'edgecolor','none');
axis('ij');

使用我生成的测试函数生成以下结果。

enter image description here