0

我有一个图像,我想在其中平滑它的边缘。在获得更准确的分割方面存在一些挑战。然而,我通过调整以下建议得到了一个解决方案:我可以做些什么来提高我的图像质量?.

原始图像在这里: 原始图像

和分段图像 分割图像

我使用的代码如下:

%# Read in image
Img = imread('image_name.png');

%# Apply filter
h   = fspecial('average');
Img = imfilter(Img, h);

%# Segment image
Img    = rgb2gray(Img);
thresh = multithresh(Img, 2);
Iseg   = imquantize(Img, thresh);    
figure, imshow(Iseg,[]), title('Segmented Image'); 

%# separate channels
blackPixels = (Iseg == 1);
grayPixels  = (Iseg == 2);
whitePixels = (Iseg == 3);


%# grow white channel
whitePixels_dilated = imdilate(whitePixels, strel('disk', 4, 4));

%# Add all channels 
Iseg(whitePixels | whitePixels_dilated) = 3;            
figure, imshow(Iseg,[]);

我现在的挑战是平滑实体(whitePixels)的边缘或所有对象的边缘。我不知道该怎么做。我尝试过过滤,但这只会去除小点。非常感谢任何帮助、想法或建议或建议。谢谢你。

4

1 回答 1

0

我建议多次应用矩形过滤器。这是如何做到这一点的方法:

I=imread('Orl1r.png');
I_gray=rgb2gray(I);
I_filtered=I_gray; % initialize the filtered image
for ii=1:10
   I_filtered=imfilter(I_filtered,1/25*ones(5)); % apply rectangular-filter multiple times
end
figure
subplot(1,2,1)
imshow(I,[0 255]);
subplot(1,2,2);
imshow(I_filtered,[0 255])

过滤后的图像如下所示: 在此处输入图像描述

希望这可以帮助。

编辑:除了矩形过滤器,您还可以使用高斯过滤器。但是多次申请的一般想法仍然存在。您可以为示例创建一个高斯过滤器,使用f=fspecial('gaussian',5,6)它创建一个5x5sigma=6 的过滤器掩码。

于 2017-02-22T12:19:29.513 回答