Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何利用matlab对图像边缘进行平滑处理_Matlab_Image Processing - Fatal编程技术网

如何利用matlab对图像边缘进行平滑处理

如何利用matlab对图像边缘进行平滑处理,matlab,image-processing,Matlab,Image Processing,我在下面看到了一张照片,但这张照片的边缘很难看。 我想用matlab编程来平滑图片的边缘,使它看起来更漂亮,有什么想法或方法有意义吗 谢谢你 您可以使用isocontour[1]边缘检测,然后沿轮廓平均相邻像素以平滑边界 [1] 您可以使用形态学打开RGB图像(扩张和侵蚀)。imopen函数的第二个输入参数是一个结构元素,用于定义形态学操作中所需的平滑量。例如,下面是我应用radius 10的磁盘结构元素的代码 img = imread('http://i.stack.imgur.com/ht4

我在下面看到了一张照片,但这张照片的边缘很难看。 我想用matlab编程来平滑图片的边缘,使它看起来更漂亮,有什么想法或方法有意义吗


谢谢你

您可以使用
isocontour
[1]边缘检测,然后沿轮廓平均相邻像素以平滑边界

[1]

您可以使用形态学打开RGB图像(扩张和侵蚀)。imopen函数的第二个输入参数是一个结构元素,用于定义形态学操作中所需的平滑量。例如,下面是我应用radius 10的磁盘结构元素的代码

img = imread('http://i.stack.imgur.com/ht4Za.jpg');
imopenBW = imopen(img, strel('disk',10));
imshow(imopenBW)
以下是一个选项(已编辑):

结果:


这有点粗糙,但这会给你一个开始。您可以尝试调整循环滤波器和中值滤波器的迭代次数和大小。尝试用平均值来改变中值,等等。

到目前为止你得到了什么?我刚刚得到了这张图片(每个点的rbg),我只是想添加一些点以使边缘更平滑,但我对算法没有什么好主意。彩色图像的平均值可能和灰度图像一样简单,但为什么它不起作用,给定适当的平均函数?绝对正确。在灰度图像中查找边缘肯定要容易得多,但它无法完成平滑图像的任务。这就是为什么我建议使用两步算法:(1)检测轮廓(2)平滑它添加结果图像将大大提高投票给你答案的人数。这种方法很容易实现,但会使图像模糊。
I = im2double(imread('ht4Za.jpg'));
% Segment the object:
gs = rgb2gray(I);
Object=~im2bw(gs, graythresh(gs));

% Smoothen the mask:
BW = bwmorph(bwconvhull(Object), 'erode', 5);
Mask=repmat(BW,[1,1,3]);

% Iterate opening operation:
Interp=I;
for k=1:5
    Interp=imopen(Interp, strel('disk',20));
end

% Keep original pixels, add the newly generated ones and smooth the output:
Interpolated(:,:,1)=medfilt2(imadd(I(:,:,1).*Object, Interp(:,:,1).*~(BW==Object)), [4 4]);
Interpolated(:,:,2)=medfilt2(imadd(I(:,:,2).*Object, Interp(:,:,2).*~(BW==Object)), [4 4]);
Interpolated(:,:,3)=medfilt2(imadd(I(:,:,3).*Object, Interp(:,:,3).*~(BW==Object)), [4 4]);

% Display the results:
Masked=imadd(Interpolated.*im2double(Mask), im2double(~Mask));
imshow(Masked);