91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .m
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-11
  • 語言: Matlab
  • 標簽: matlab??邊緣提取??

資源簡介

不用matlab的自帶函數(shù),自編的邊緣提取程序。

資源截圖

代碼片段和文件信息

pic2=imread(‘fig3.tif‘);
subplot(231);
imshow(pic2);
title(‘原始圖像‘);
[ROWCOL]=size(pic2);???????????????????%取表示圖像的矩陣行列值數(shù)
count=imhist(pic2);?????????????????????%直方圖統(tǒng)計????????????????????%圖像矩陣大小
N=ROW*COL;?????????????????????????????%圖像像素個數(shù)
L=256;?????????????????????????????????%指定圖像灰度級為256級
count=count/N;?????????????????????????%各灰度級出現(xiàn)的概率
%================尋找出現(xiàn)概率不為0的最小灰度值=============
for?i=2:L??????????????????????????
????if?count(i)~=0
????????st=i-1;
????????break;
????end
end
%================尋找出現(xiàn)概率不為0的最大灰度值=============
for?i=L:-1:1
????if?count(i)~=0
????????nd=i-1;
????????break;
????end
end
%=========================計算閾值========================
f=count(st+1:nd+1);
p=st;q=nd-st;??????????????????????%p和q分別是灰度的起始和結(jié)束值
u=0;
for?i=1:q
????u=u+f(i)*(p+i-1);
????ua(i)=u;
end
for?i=1:q
????w1(i)=sum(f(1:i));
end
d=(u*w1-ua).^2./(w1.*(1-w1));???????%求出不同i值時類間方差
[ytp]=max(d);??????????????????????%求出最大方差對應(yīng)的灰度級
th=tp+p????????????????????????????%threshold
if?th>200
????th=100;
end;
%?if?th<40
%?????th=45;
%?end;
W=zeros(ROWCOL);???????????????????%新建一幅ROW×COL大小的圖

X=double(pic2);

%%%從第2行第2列開始到倒數(shù)第2行倒數(shù)第2列

for?i=2:ROW-1

????for?j=2:COL-1
????????%%%%sobel算子
????????%%%%Dx是對X的偏導(dǎo)數(shù),檢測水平邊緣,梯度方向是垂直的.
????????Dx=X(i+1j-1)+2*X(i+1j)+X(i+1j+1)-X(i-1j-1)-2*X(i-1j)-X(i-1j+1);
????????%%%%Dy是對Y的偏導(dǎo)數(shù),檢測垂直邊緣的梯度方向是水平的.
????????Dy=X(i-1j+1)+2*X(ij+1)+X(i+1j+1)-X(i-1j-1)-2*X(ij-1)-X(i+1j-1);
????????%%%梯度的幅值??????
????????Mag=sqrt(Dx*Dx+Dy*Dy);
????????%%%梯度的方向角Dy有取0的可能.
????????%%%a(ij)=round(180*(atan(Dx/Dy)));
????????%%%梯度取整賦值給輸出圖像Wanted=W;
????????W(ij)=round(Mag);
????end
end

for?i=1:ROW
????for?j=1:COL
????????if?W(ij)>th
???????????W(ij)=255;
????????else
???????????W(ij)=0;
????????end
????end
end
subplot(232);
imshow(W);
title(‘Sobel算子邊緣提取‘);

for?i=2:ROW-1

????for?j=2:COL-1
????????%%%%prewitt算子
????????Dx=X(i+1j-1)+X(i+1j)+X(i+1j+1)-X(i-1j-1)-X(i-1j)-X(i-1j+1);
????????Dx=Dx*4/3;
????????Dy=X(i-1j+1)+X(ij+1)+X(i+1j+1)-X(i-1j-1)-X(ij-1)-X(i+1j-1);??
????????Dy=Dy*4/3;
????????Mag=sqrt(Dx*Dx+Dy*Dy);
????????%%%梯度的方向角Dy有取0的可能.
????????%%%a(ij)=round(180*(atan(Dx/Dy)));
????????%%%梯度取整賦值給輸出圖像Wanted=W;
????????W(ij)=round(Mag);
????end
end

%%%閾值人為設(shè)定隨不同圖像不同目的改變.
%%%大于閾值認為是邊緣設(shè)為最亮;小于則為背景最黑

for?i=1:ROW
????for?j=1:COL
????????if?W(ij)>th
???????????W(ij)=255;
????????else
???????????W(ij)=0;
????????end
????end
end
subplot(233);
imshow(W);
title(‘Prewitt算子邊緣提取‘);

for?i=1:ROW-1

????for?j=1:COL-1
????????%%%%prewitt算子
????????Dx=X(ij

評論

共有 條評論