在CIELab色彩空間下使用八方向Sobel運算元實現邊緣檢測

來源:互聯網
上載者:User

參考河北師範大學碩士學位論文——基於八方向Sobel運算元的邊緣檢測演算法研究。
由於自己實現濾波器運算,計算速度很慢,以後有能力再進行改進。

運算元定義如下:

演算法思路:
1.將RGB映像轉化為CIELab色彩空間的映像。
2.計算不同方向上的梯度,乘以權值後取最大值當作輸出值。

效果如下:

已耗用時間:33.543444 秒。


已耗用時間:79.695009 秒。

跑的好慢QAQ

代碼如下:
CIELabEdge.m(演算法的總入口)

%在CIELab色彩空間下對圖片進行邊緣檢測(參數為待處理的RGB映像)%使用論文中的八方向Sobel運算元進行濾波%論文引自--鄭英娟. 基於八方向Sobel運算元的邊緣檢測演算法研究. 河北師範大學碩士學位論文. 2013.3.26%From:Yinggang Wang%Create Date:2018.3.30function [] = CIELabEdge(img)%色彩空間轉換Lab = RGB2Lab(img);%濾波處理Edge = MyFilter(Lab);%輸出結果figure('NumberTitle','off','Name','邊緣');imshow(Edge,[]);figure('NumberTitle','off','Name','邊緣(負片)');imshow(imcomplement(Edge),[]);

MyFilter.m(自己實現的濾波器)

%使用濾波器濾波(參數:CIELab色彩空間的三維矩陣)(映像輸出大小比實際小一點)%%From:Yinggang Wang%Create Date:2018.3.30function im = MyFilter(ori)s = size(ori);im = zeros(s(1),s(1,2));for i = 3:(s(1)-2)    for j = 3:(s(2)-2)        im(i-2,j-2) = getOutput(ori,i,j);    endend

getOutput.m(得到每一點的輸出值)

%得到x,y座標像素點的輸出值%%From:Yinggang Wang%Create Date:2018.3.30function out = getOutput(ori,x,y)%以下是八個方向的運算元D0 = [1,2,4,2,1];D22_5 = [1,2,4,2,4];D45 = [1,4,2,4,1];D67_5 = [1,2,4,2,4];D90 = [1,2,4,2,1];D112_5 = [1,2,4,2,1];D135 = [1,4,2,4,1];D157_5 = [1,2,4,2,4];a = zeros(1,8);a(1) = sum(D0 .* [CD(ori(x-2,y-1),ori(x-2,y+1)),CD(ori(x-1,y-1),ori(x-1,y+1)),CD(ori(x,y-1),ori(x,y+1)),CD(ori(x+1,y-1),ori(x+1,y+1)),CD(ori(x+2,y-1),ori(x+2,y+1))]);a(2) = sum(D22_5 .* [CD(ori(x-2,y),ori(x+2,y)),CD(ori(x-1,y+1),ori(x+1,y-1)),CD(ori(x,y-1),ori(x,y+1)),CD(ori(x-1,y-1),ori(x+1,y+1)),CD(ori(x-1,y),ori(x+1,y))]);a(3) = sum(D45 .* [CD(ori(x+1,y-2),ori(x+2,y-1)),CD(ori(x,y-1),ori(x+1,y)),CD(ori(x-1,y-1),ori(x+1,y+1)),CD(ori(x-1,y),ori(x,y+1)),CD(ori(x-2,y+1),ori(x-1,y+2))]);a(4) = sum(D67_5 .* [CD(ori(x,y-2),ori(x,y+2)),CD(ori(x-1,y-1),ori(x+1,y+1)),CD(ori(x-1,y),ori(x+1,y)),CD(ori(x-1,y+1),ori(x+1,y-1)),CD(ori(x,y+1),ori(x,y-1))]);a(5) = sum(D90 .* [CD(ori(x-1,y-2),ori(x+1,y-2)),CD(ori(x-1,y-1),ori(x+1,y-1)),CD(ori(x-1,y),ori(x+1,y)),CD(ori(x-1,y-2),ori(x+1,y-2)),CD(ori(x-1,y+2),ori(x+1,y+2))]);a(6) = sum(D112_5 .* [CD(ori(x,y-2),ori(x,y+2)),CD(ori(x-1,y-1),ori(x+1,y+1)),CD(ori(x-1,y),ori(x+1,y)),CD(ori(x-1,y+1),ori(x+1,y-1)),CD(ori(x,y+1),ori(x,y-1))]);a(7) = sum(D135 .* [CD(ori(x-1,y-2),ori(x-2,y-1)),CD(ori(x,y-1),ori(x-1,y)),CD(ori(x+1,y-1),ori(x-1,y+1)),CD(ori(x+1,y),ori(x,y+1)),CD(ori(x+2,y+1),ori(x+1,y+2))]);a(8) = sum(D157_5 .* [CD(ori(x-2,y),ori(x+2,y)),CD(ori(x-1,y+1),ori(x+1,y-1)),CD(ori(x,y-1),ori(x,y+1)),CD(ori(x-1,y-1),ori(x+1,y+1)),CD(ori(x-1,y),ori(x+1,y))]);a(1) = a(1)/10.0;a(2) = a(2)/13.0;a(3) = a(3)/12.0;a(4) = a(4)/13.0;a(5) = a(5)/10.0;a(6) = a(6)/13.0;a(7) = a(7)/12.0;a(8) = a(8)/13.0;out = ((max(a)+0.5));

CD.m(求兩點的歐式距離)

%求兩點的歐式距離%%From:Yinggang Wang%Create Date:2018.3.30function dis = CD(a,b)dis = sqrt((a-b)^2 + (a-b)^2 + (a-b)^2);

代碼已經上傳:點擊進入下載頁面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.