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

How to smoothen the edges from an image obtained from imagesc function

我有一个通过保存 imagesc 函数获得的 RGB 图像,如下所示。如何 refine/smoothen 图像中存在的边缘。

它由更锐利的边缘组成,我需要在此处对其进行平滑处理。我无法找到对 RGB 图像执行此操作的解决方案。我不想在图像中看到阶梯效果,而是想使边缘均匀。请帮忙提前谢谢。

也许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')

编辑

这里我做的是resize + filtering + rounding:

% 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')

解决方案

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

I = imread('im.png');
H = fspecial('gaussian',5,5);
I2 = imfilter(I,H);

更改 'blurlevel' 参数(决定高斯内核大小)以使图像更平滑或更锐利。

结果

如果您只是在寻找更直的边缘,例如海拔图,您可以尝试 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');

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