【matlab图像处理】图片生成手绘效果

%% 例10.3 edge 边缘检测 sobel
clc,close all
clear
f = imread('C:\Users\Administrator\Desktop\psb (2).jpg');
figure,imshow(f)
title('原始图像')
f=im2bw(f,0.45);
figure,imshow(f)
title('二值图像')
% d=imcomplement(f);
% figure,imshow(d);
% title('取反图像')   
f=imclearborder(f,8);
figure,imshow(f);
title('清除边界图像')  
[gv11,tvertical] = edge(f,'sobel','vertical');
figure,imshow(gv11)
tvertical
title('使用带有自动确定的阈值的一个垂直[sobel]掩模后,函数[edge]导致的结果')


[gv12,thorizontal] = edge(f,'sobel','horizontal');
figure,imshow(gv12)
thorizontal
title('使用带有自动确定的阈值的一个水平[sobel]掩模后,函数[edge]导致的结果')


[gboth,tboth] = edge(f,'sobel');
tboth
figure,imshow(gboth)
title('使用自动阈值的一个同时考虑水平垂直[sobel]掩模后,函数[edge]导致的结果')


w45 = [-2 -1 0; -1 0 1; 0 1 2];
g45 = imfilter(double(f),w45,'replicate');
T = 0.3*max(abs(g45(:)));
g45 = g45>=T;
figure,imshow(g45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[45度]边缘的结果')


w_45 = [0 1 2; -1 0 1; -2 -1 0];
g_45 = imfilter(double(f),w_45,'replicate');
T = 0.3*max(abs(g_45(:)));
g_45 = g_45>=T;
figure,imshow(g_45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[-45度]边缘的结果')


figure,imshow(g45 + g_45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[-45度]+[45度]边缘的结果')


%% 例10.3 edge 边缘检测 prewitt
clc,close all
clear
f = imread('C:\Users\Administrator\Desktop\psb (2).jpg');
figure,imshow(f)
title('原始图像')


[gv1,t] = edge(f,'prewitt','vertical');
figure,imshow(gv1)
t
title('使用带有自动确定的阈值的一个垂直[prewitt]掩模后,函数[edge]导致的结果')


gv2 = edge(f,'prewitt',0.15,'vertical');
figure,imshow(gv2)
title('使用指定阈值的一个垂直[prewitt]掩模后,函数[edge]导致的结果')


gboth = edge(f,'prewitt',0.15);
figure,imshow(gboth)
title('使用指定阈值的一个同时考虑水平垂直[prewitt]掩模后,函数[edge]导致的结果')


w45 = [-2 -1 0; -1 0 1; 0 1 2]
g45 = imfilter(double(f),w45,'replicate');
T = 0.3*max(abs(g45(:)));
g45 = g45>=T;
figure,imshow(g45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[45度]边缘的结果')


w_45 = [0 1 2; -1 0 1; -2 -1 0]
g_45 = imfilter(double(f),w_45,'replicate');
T = 0.3*max(abs(g_45(:)));
g_45 = g_45>=T;
figure,imshow(g_45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[-45度]边缘的结果')


%% 例10.3 edge 边缘检测 roberts
clc,close all
clear
f = imread('C:\Users\Administrator\Desktop\psb (2).jpg');
figure,imshow(f)
title('原始图像')


[gv1,t] = edge(f,'roberts','vertical');
figure,imshow(gv1)
t
title('使用带有自动确定的阈值的一个垂直[roberts]掩模后,函数[edge]导致的结果')


gv2 = edge(f,'roberts',0.15,'vertical');
figure,imshow(gv2)
title('使用指定阈值的一个垂直[roberts]掩模后,函数[edge]导致的结果')


gboth = edge(f,'roberts',0.15);
figure,imshow(gboth)
title('使用指定阈值的一个同时考虑水平垂直[roberts]掩模后,函数[edge]导致的结果')


w45 = [-2 -1 0; -1 0 1; 0 1 2]
g45 = imfilter(double(f),w45,'replicate');
T = 0.3*max(abs(g45(:)));
g45 = g45>=T;
figure,imshow(g45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[45度]边缘的结果')


w_45 = [0 1 2; -1 0 1; -2 -1 0]
g_45 = imfilter(double(f),w_45,'replicate');
T = 0.3*max(abs(g_45(:)));
g_45 = g_45>=T;
figure,imshow(g_45)
title('使用函数[imfilter](具有指定的掩模和阈值)计算[-45度]边缘的结果')


%% 例10.4 Sobel, LoG, Canny 边缘检测器的比较
clc,close all
clear
f = imread('C:\Users\Administrator\Desktop\psb (2).jpg');
figure,imshow(f)
title('原始图像')


[g_sobel_default,ts] = edge(f,'sobel');
figure,imshow(g_sobel_default)
title('[sobel]边缘检测器使用默认选项产生的结果')


[g_log_default,tlog] = edge(f,'log');
figure,imshow(g_log_default)
title('[LoG]边缘检测器使用默认选项产生的结果')


[g_canny_default,tc] = edge(f,'canny');
figure,imshow(g_canny_default)
title('[canny]边缘检测器使用默认选项产生的结果')


[g_sobel_best,ts] = edge(f,'sobel',0.05);
figure,imshow(g_sobel_best)
title('[sobel]边缘检测器使用 edge(f,sobel,0.05) 产生的结果')


[g_log_best,tlog] = edge(f,'log',0.003,2.25);
figure,imshow(g_log_best)
title('[LoG]边缘检测器使用 edge(f,log,0.003,2.25) 产生的结果')


[g_canny_best,tc] = edge(f,'canny',[0.04 0.10],1.5);
figure,imshow(g_canny_best)
title('[canny]边缘检测器使用 edge(f,canny,[0.04 0.10],1.5) 产生的结果')





  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值