集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1113|回复: 3

MATLAB的Sobel边缘检测算法实现

[复制链接]
fpga_feixiang 发表于 2020-4-5 22:23:53 | 显示全部楼层 |阅读模式
%RGB_YCbCr
2 clc;
3 clear all;
4 close all;
5
6 RGB_data = imread('lena.jpg');%
7
8 R_data =    RGB_data(:,:,1);
9 G_data =    RGB_data(:,:,2);
10 B_data =    RGB_data(:,:,3);
11
12 %imshow(RGB_data);
13
14 [ROW,COL, DIM] = size(RGB_data);
15
16 Y_data = zeros(ROW,COL);
17 Cb_data = zeros(ROW,COL);
18 Cr_data = zeros(ROW,COL);
19 Gray_data = RGB_data;
20
21 for r = 1:ROW
22     for c = 1:COL
23         Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);
24         Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;
25         Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + 128;
26     end
27 end
28
29 Gray_data(:,:,1)=Y_data;
30 Gray_data(:,:,2)=Y_data;
31 Gray_data(:,:,3)=Y_data;
32
33 figure;
34 imshow(Gray_data);
35
36 %Median Filter
37 imgn = imnoise(Gray_data,'salt & pepper',0.02);
38
39 figure;
40 imshow(imgn);
41
42 Median_Img = Gray_data;
43 for r = 2:ROW-1
44     for c = 2:COL-1
45         median3x3 =[imgn(r-1,c-1)    imgn(r-1,c) imgn(r-1,c+1)
46                     imgn(r,c-1)      imgn(r,c)      imgn(r,c+1)
47                     imgn(r+1,c-1)      imgn(r+1,c) imgn(r+1,c+1)];
48         sort1 = sort(median3x3, 2, 'descend');
49         sort2 = sort([sort1(1), sort1(4), sort1(7)], 'descend');
50         sort3 = sort([sort1(2), sort1(5), sort1(8)], 'descend');
51         sort4 = sort([sort1(3), sort1(6), sort1(9)], 'descend');
52         mid_num = sort([sort2(3), sort3(2), sort4(1)], 'descend');
53         Median_Img(r,c) = mid_num(2);
54     end
55 end
56
57 figure;
58 imshow(Median_Img);
59
60 %Sobel_Edge_Detect
61
62 Median_Img = double(Median_Img);
63 Sobel_Threshold = 150;
64 Sobel_Img = zeros(ROW,COL);
65 for r = 2:ROW-1
66     for c = 2:COL-1
67         Sobel_x = Median_Img(r-1,c+1) + 2*Median_Img(r,c+1) + Median_Img(r+1,c+1) - Median_Img(r-1,c-1) - 2*Median_Img(r,c-1) - Median_Img(r+1,c-1);
68         Sobel_y = Median_Img(r-1,c-1) + 2*Median_Img(r-1,c) + Median_Img(r-1,c+1) - Median_Img(r+1,c-1) - 2*Median_Img(r+1,c) - Median_Img(r+1,c+1);
69         Sobel_Num = abs(Sobel_x) + abs(Sobel_y);
70         %Sobel_Num = sqrt(Sobel_x^2 + Sobel_y^2);
71         if(Sobel_Num > Sobel_Threshold)
72             Sobel_Img(r,c)=0;
73         else
74             Sobel_Img(r,c)=255;
75         end
76     end
77 end
78
79 figure;
80 imshow(Sobel_Img);
大鹏 发表于 2020-4-7 14:47:27 | 显示全部楼层
MATLAB的Sobel边缘检测算法实现
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-20 05:48 , Processed in 0.076930 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表