Matlab关于图像边缘提取,用Sobel算子、Roberts算子、Prewitt算子,加QQ详谈 急用!! 分别利用 Roberts、Prewitt、Sobel 和 L...

\u7528Sobel\u7b97\u5b50\u3001Roberts\u7b97\u5b50\u3001Prewitt\u7b97\u5b50\u5bf9\u56fe\u50cf\u8fdb\u884c\u8fb9\u7f18\u68c0\u6d4b\u7684\u7a0b\u5e8f\uff0c\u5728matlab\u73af\u5883\u4e0b\uff0c\u7a0b\u5e8f\u8981\u5b8c\u6574\uff0c\u6700\u597d\u6709\u56fe

close all
clear all
I=imread('tig.jpg'); %\u8bfb\u53d6\u56fe\u50cf
I1=im2double(I); %\u5c06\u5f69\u56fe\u5e8f\u5217\u53d8\u6210\u53cc\u7cbe\u5ea6
I2=rgb2gray(I1); %\u5c06\u5f69\u8272\u56fe\u53d8\u6210\u7070\u8272\u56fe
[thr, sorh, keepapp]=ddencmp('den','wv',I2);
I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp); %\u5c0f\u6ce2\u9664\u566a
I4=medfilt2(I3,[9 9]); %\u4e2d\u503c\u6ee4\u6ce2
I5=imresize(I4,0.2,'bicubic'); %\u56fe\u50cf\u5927\u5c0f
BW1=edge(I5,'sobel'); %sobel\u56fe\u50cf\u8fb9\u7f18\u63d0\u53d6
BW2=edge(I5,'roberts'); %roberts\u56fe\u50cf\u8fb9\u7f18\u63d0\u53d6
BW3=edge(I5,'prewitt'); %prewitt\u56fe\u50cf\u8fb9\u7f18\u63d0\u53d6
BW4=edge(I5,'log'); %log\u56fe\u50cf\u8fb9\u7f18\u63d0\u53d6
BW5=edge(I5,'canny'); %canny\u56fe\u50cf\u8fb9\u7f18\u63d0\u53d6
h=fspecial('gaussian',5); %\u9ad8\u65af\u6ee4\u6ce2
BW6=edge(I5,'zerocross',[ ],h); %zerocross\u56fe\u50cf\u8fb9\u7f18\u63d0\u53d6
figure;
subplot(1,3,1); %\u56fe\u5212\u5206\u4e3a\u4e00\u884c\u4e09\u5e45\u56fe\uff0c\u7b2c\u4e00\u5e45\u56fe
imshow(I2); %\u7ed8\u56fe
figure;
subplot(1,3,1);
imshow(BW1);
title('Sobel\u7b97\u5b50');
subplot(1,3,2);
imshow(BW2);
title('Roberts\u7b97\u5b50');
subplot(1,3,3);
imshow(BW3);
title('Prewitt\u7b97\u5b50');

clear;
fid=fopen('d:\image\Lena.img','r'); %\u6253\u5f00\u65e0\u683c\u5f0f\u6587\u4ef6
data1=(fread(fid,[256,256],'uint8'))';
subplot(2,3,1),imagesc(data1);
colormap(gray);
title('LENA','Color','r');

subplot(2,3,2);
data2=uint8(data1);
R=edge(data2,'Roberts');
imagesc(R);
title('Roberts\u68c0\u6d4b\u7b97\u5b50');

subplot(2,3,3);
data2=uint8(data1);
Q=edge(data2,'Prewitt');
imagesc(Q);
title('Prewitt\u68c0\u6d4b\u7b97\u5b50');

subplot(2,3,4);
data2=uint8(data1);
S=edge(data2,'Sobel');
imagesc(S);
title('Sobel\u68c0\u6d4b\u7b97\u5b50');

subplot(2,3,5);
data2=uint8(data1);
T=edge(data2,'Log');
imagesc(T);
title('Log\u68c0\u6d4b\u7b97\u5b50');

Matlab\u4e2d\u8fd0\u884c\u8fc7\u7684 \u6b63\u786e\u7684\uff01

4.2.1 Roberts算法原理

Roberts算子是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子,他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。

4.2.2 算法流程

Roberts算子在2×2领域上计算对角导数

(4-1)

成为Roberts交叉算子。在实际应用中为了简化计算,用梯度函数的Roberts绝对值来近似

(4-2)另外还可以用Roberts 最大算子来计算

(4-3)

上式能够提供较好的不变性边缘取向。对于同等长度但取向不同的边缘,应用Roberts最大值算子比应用Roberts交叉算子所得到的合成幅度变化小。Roberts边缘检测算子的卷积算子为

Roberts 边缘算子方向模版

由上面两个卷积算子对图像运算后,代入(3-7)式,可求得图像的梯度幅度值,然后选取门限TH,做如下判断>TH,为阶跃状边缘点为一个二值图像,也就是图像的边缘图像。4.4.1 Prewitt 算法原理

Prewitt边缘算子是一种边缘样板算子。Prewitt 从加大边缘检测算子的模板大小出发,由2×2 扩大到3×3 来计算差分算子,采用Prewitt 算子不仅能检测边缘点,而且能抑制噪声的影响。
Prewitt 采用计算偏微分估计的方法,由式(4-9)所示的两个卷积算子形成了Prewitt边缘算子,样板算子由理想的边缘子图像构成,依次用边缘样板去检测图像,与被检测区域最为相似的样板给出最大值,用这个最大值作为算子的输出

(4-9)

另一种方法是,可以将Prewitt算子扩展到八个方向,每个模版对特定的边缘方向做出最大响应,所有8个方向中最大值作为边缘幅度图像的输出,这些算子样板由离线的边缘子图像构成。依次用边缘样板去检测图像,与被检测区域最为相似的的样板给出最大值。定义Prewitt 边缘检测的算子模版如下:

(1)1方向 (2)2方向 (3)3方向 (4)4方

close all
clear all
I=imread('tig.jpg'); %读取图像
I1=im2double(I); %将彩图序列变成双精度
I2=rgb2gray(I1); %将彩色图变成灰色图
[thr, sorh, keepapp]=ddencmp('den','wv',I2);
I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp); %小波除噪
I4=medfilt2(I3,[9 9]); %中值滤波
I5=imresize(I4,0.2,'bicubic'); %图像大小
BW1=edge(I5,'sobel'); %sobel图像边缘提取
BW2=edge(I5,'roberts'); %roberts图像边缘提取
BW3=edge(I5,'prewitt'); %prewitt图像边缘提取
BW4=edge(I5,'log'); %log图像边缘提取
BW5=edge(I5,'canny'); %canny图像边缘提取
h=fspecial('gaussian',5); %高斯滤波
BW6=edge(I5,'zerocross',[ ],h); %zerocross图像边缘提取
figure;
subplot(1,3,1); %图划分为一行三幅图,第一幅图
imshow(I2); %绘图
figure;
subplot(1,3,1);
imshow(BW1);
title('Sobel算子');
subplot(1,3,2);
imshow(BW2);
title('Roberts算子');
subplot(1,3,3);
imshow(BW3);
title('Prewitt算子');
在读图片的时候自己改下片名。

  • matlab濡備綍鎻愬彇鍐呴儴杈圭紭鐐?鍙互缁欎簺浠g爜鍚
    绛旓細MATLAB鎻愬彇杈圭紭鐐瑰潗鏍囷紝鍦ㄦ洸绾夸笂姣忛殧鍑犱釜鍍忕礌鎴栫浉鍚岀殑璺濈閲囦竴涓壒寰佺偣锛岀劧鍚庢彁鍙栧嚭杈圭紭鐐瑰潗鏍锛屾柟娉曞涓嬶細瀵绘壘鍍忕礌涓1鐨勭偣 col涓烘í鍧愭爣 row涓虹旱鍧愭爣 [col,row]=find(I == 1);鍦ㄤ竴瀹氳寖鍥村唴绛涢夊潗鏍 for(col=1:1024 )for(row=1:768)if(col>374 & col<481 &row>146 &row<246)[col,row]...
  • 鍏充簬鐢matlab澶勭悊鍥惧儚鐨勯棶棰,濡備綍灏嗕笅杩涜杈圭紭鎻愬彇,寰楀埌姣旇緝娓呮櫚鐨勮疆寤...
    绛旓細灏哄娴嬮噺涔熷氨鏄壒寰鎻愬彇锛闈㈢Н鍙互鐢ㄦ壂鎻忔硶璁$畻鍖哄煙鐨勫儚绱犲硷紝濡 sum=0;for i=30:480 for j=5:505 if j2(i,j)>=0.5 锛坖2涓哄鐞嗗浘鍍忥級sum=sum+1;end濡傛灉鏄绠楄疆寤撻暱搴︼紝鐢杈圭紭鎻愬彇鐨勮绠楀啀鐢ㄦ壂鎻忔硶璁$畻鍍忕礌鍊肩偣銆MATLAB鍥惧儚澶勭悊鐨勭畻娉曠敤鍒板緱绋嬪簭閮戒笉闅撅紝鍙浣犵殑鍥惧儚澶勭悊娴佺▼璇曞嚭鏉ョ殑鏁堟灉濂...
  • Matlab鍏充簬鍥惧儚杈圭紭鎻愬彇,鐢⊿obel绠楀瓙銆丷oberts绠楀瓙銆丳rewitt绠楀瓙,鍔燪Q璇...
    绛旓細涓婂紡鑳藉鎻愪緵杈冨ソ鐨勪笉鍙樻ц竟缂樺彇鍚戙傚浜庡悓绛夐暱搴︿絾鍙栧悜涓嶅悓鐨杈圭紭锛搴旂敤Roberts鏈澶у肩畻瀛愭瘮搴旂敤Roberts浜ゅ弶绠楀瓙鎵寰楀埌鐨勫悎鎴愬箙搴﹀彉鍖栧皬銆俁oberts杈圭紭妫娴嬬畻瀛愮殑鍗风Н绠楀瓙涓 Roberts 杈圭紭绠楀瓙鏂瑰悜妯$増 鐢变笂闈袱涓嵎绉畻瀛愬鍥惧儚杩愮畻鍚庯紝浠e叆锛3-7锛夊紡锛屽彲姹傚緱鍥惧儚鐨勬搴﹀箙搴﹀硷紝鐒跺悗閫夊彇闂ㄩ檺TH锛屽仛濡備笅鍒ゆ柇>...
  • 璺眰鐢MATLAB缂栧啓鐨鍏充簬灏忔尝鍙樻崲鏁板瓧鍥惧儚鏁板瓧杈圭紭鎻愬彇鐨勭▼搴廮鐧惧害鐭 ...
    绛旓細鍩轰簬灏忔尝鍙樻崲鐨勫灏哄害鍥惧儚杈圭紭妫娴matlab婧愪唬鐮(鍦Matlab7.0涓嬭繍琛)clear all;load wbarb;I = ind2gray(X,map);imshow(I);I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1);[N,M] = size(I);h = [0.125,0.375,0.375,0.125];g = [0.5,-0.5];delta = [1,0,0...
  • 璋佽兘甯姪鎴戞妸杩欏箙鍥剧墖鐨勮竟缂樻彁鍙鍑烘潵鐢Matlab
    绛旓細绠鍗曠殑鍙互灏 鍥惧儚杞崲涓虹伆搴﹀浘鍍 鐒跺悗璁剧疆涓涓槇鍊肩劧鍚庤祴鍊锛屽彧鏄矖鐣ョ殑澶勭悊锛屼笉澶熺簿纭紝浣犳槸闇瑕佹渶鍚庤揪鍒颁粈涔堟晥鏋滐紵鈥斺斺擨=imread('E:\鍥惧儚\123.jpg'); %鍥剧墖浣嶇疆 I=rgb2gray(I); %杞负鐏板害鍥惧儚 [m,n]=size(I);for i=1:m for j=1:n if I(i,j)>18||I(i,j)<10 %璁句簡...
  • 鍒╃敤Matlab瀹炵幇鍥惧儚杈圭紭鎻愬彇
    绛旓細I = imread('circuit.tif');BW1 = edge(I,'prewitt');BW2 = edge(I,'canny');figure, imshow(BW1)figure, imshow(BW2)杩欎簺婧愮▼寮忓叏鐨凪ATALB閲屾湁
  • matlab鍥惧儚濡備綍鐢ㄤ唬鐮佸畬鎴愬浘鍍忕殑鍒嗗壊銆杈圭紭妫娴嬪拰鎷兼帴鐨勪换鍔?_鐧惧害...
    绛旓細% 鍔犲叆杈圭紭妫娴嬬殑浠g爜\x0d\x0a % 浠ヤ笂鏄subimage杩涜杈圭紭妫娴媆x0d\x0a blocks{k1,k2}=subimage;\x0d\x0a end\x0d\x0aend\x0d\x0aprocessed=I; % processed涓哄鐞嗗悗鐨鍥惧儚锛鐢ㄥ師鍥惧儚瀵瑰叾鍒濆鍖朶x0d\x0a% 浠ヤ笅涓烘嫾鎺ュ浘鍍廫x0d\x0afor k1=1:...
  • matlab:璇曢噰鐢⊿obel绠楀瓙瀵逛竴骞256鐏板害鍥惧儚杩涜杈圭紭鎻愬彇
    绛旓細I = imread('lena.bmp');subplot(121);imshow(I);sobel绠楀瓙妯℃澘 H = [1 2 1;0 0 0 -1 -2 -1];J = conv2(I,H,'same'); %鍗风Н杩愮畻 subplot(122);imshow(uint8(J));
  • matlab涓濡備綍鎶杈圭紭妫娴嬪嚭鏉ョ殑鍥惧儚杩涜鐩寸嚎鎷熷悎
    绛旓細鐢╯obel,canny绠楀瓙閮藉彲浠鎻愬彇鍑杈圭紭;鎻愬彇鍑鸿竟缂樺啀杩涜im2bw浜屽煎寲,寰楀埌浜屽煎寲鍚庣殑0,1鍥惧儚;1鐨勫浘鍍忔湰璐ㄤ笂鏄敱绂绘暎鐨勭偣鏋勬垚,灏嗙鏁g殑鐐圭殑x,y鍧愭爣鎵惧嚭,鍙互鐢╢ind鍛戒护,渚嬪[x,y]=find(I==1);鏈鍚庣敤cftool鏇茬嚎鎷熷悎宸ュ叿绠,鎷熷悎鍑烘墍鏈夌殑x,y鐨勫潗鏍囩偣;澶ц嚧杩欎箞涓濊矾,寰杩欐柟闈娇鍔,鍩烘湰涓婂氨鍙互鎼炲畾....
  • matlab鎻愬彇鐭╁舰(濡備笅鍥)涓婁笅涓ゆ潯杈圭紭绋嬪簭鎬庝箞鍋
    绛旓細L = bwlabel(~img); %img鏄繖寮犱簩鍊煎寲鐨勫浘 for i = 1 : max(L(:))if sum(L==i)<10 L(L==i) = 0; %鐢ㄦ潵鍘绘帀閭d咯灏忛粦鐐 end E = edge(L);figure;imshow(E);
  • 扩展阅读:matlab进行边缘提取 ... 边缘增强算子matlab ... matlab边缘提取及拟合 ... 边缘提取 ... 边缘分割matlab ... matlab提取图像边缘坐标 ... matlab提取图像一部分 ... 图像边缘检测matlab ... matlab边缘检测与轮廓提取 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网