日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

基于小波变换的图像边缘检测(matlab祖传代码注释)

發布時間:2025/3/15 循环神经网络 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于小波变换的图像边缘检测(matlab祖传代码注释) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于小波變換的圖像邊緣提取應用展示


上圖為針對png格式無背景原圖的邊緣檢測,對比各種邊緣檢測算子,小波變化的優勢體現并不明顯。

上圖為針對含背景圖片的邊緣檢測,小波變化的優勢這里體現的比較明顯。

matlab祖傳代碼注釋

相信看到這篇文章的小伙伴一定已經搜索了“小波變換 邊緣檢測”這樣的關鍵詞很多次了,但是得到的代碼好像只有那一個,哈哈哈,我當時也是只發現了這一個代碼,在查閱了一些文獻后對代碼思路有一些理解,在這里和大家分享~

廢話不多說,先放一張流程圖便于大家理解代碼。下面為加了一些注釋的祖傳代碼。

clear all; I = imread('E:\DAT\postgraudate\class\信號\matlab\test\retest.jpg'); %讀取照片 subplot(2,3,1); imshow(I);I = rgb2gray(I);subplot(2,3,2);imshow(I); %彩色照片轉灰度圖 I1 = imadjust(I,stretchlim(I),[0,1]); %增強圖片對比度,白的更白,黑的更黑 subplot(2,3,3); imshow(I1); [N,M] = size(I); %獲取圖片尺寸 h = [0.125,0.375,0.375,0.125]; %尺度向量 相當于低通濾波器 g = [0.5,-0.5]; %相當于高通濾波器 delta = [1,0,0]; J = 2; % 分解尺度a(1:N,1:M,1,1:J+1) = 0; %初始化變量 dx(1:N,1:M,1,1:J+1) = 0; %x方向偏導初始化 dy(1:N,1:M,1,1:J+1) = 0; %y方向偏導初始化 d(1:N,1:M,1,1:J+1) = 0; % 模值初始化a(:,:,1,1) = conv2(h,h,I,'same'); %卷積運算 dx(:,:,1,1) = conv2(delta,g,I,'same'); %計算x方向偏導 dy(:,:,1,1) = conv2(g,delta,I,'same'); %計算y方向偏導x = dx(:,:,1,1); y = dy(:,:,1,1); d(:,:,1,1) = sqrt(x.^2+y.^2); %計算模值 I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]); %增強對比度 subplot(2,3,4); imshow(I1); lh = length(h); lg = length(g); for j = 1:J %按照分解尺度進行分解lhj = 2^j*(lh-1)+1; lgj = 2^j*(lg-1)+1; hj(1:lhj)=0; gj(1:lgj)=0; for n = 1:lh hj(2^j*(n-1)+1)=h(n); end for n = 1:lg gj(2^j*(n-1)+1)=g(n); end a(:,:,1,j+1) = conv2(hj,hj,a(:,:,1,j),'same'); dx(:,:,1,j+1) = conv2(delta,gj,a(:,:,1,j),'same'); dy(:,:,1,j+1) = conv2(gj,delta,a(:,:,1,j),'same'); x = dx(:,:,1,j+1); y = dy(:,:,1,j+1); dj(:,:,1,j+1) = sqrt(x.^2+y.^2); I1 = imadjust(dj(:,:,1,j+1),stretchlim(dj(:,:,1,j+1)),[0 1]);%subplot(2,3,4+j);figure();imshow(I1); end%以下部分為噪點濾波,和小波變化無關 Icomp = imcomplement(I1); %反轉圖像 Ifilled = imfill(Icomp, 'holes'); se = strel('disk', 15); %小于此半徑的連通域忽略掉 Iopenned = imopen(Ifilled, se); %subplot(2,4,4+j+1); figure(); imshow(Iopenned);

噪點濾波作用如下圖所示

大家看到這里可能對每一行代碼大概知道時什么意思了,但是整個代碼段的邏輯結構可能還不清楚。就比如說,我現在去買菜,我知道了現在是我在給他錢,下一步是他找我錢,但是,我為毛要去買菜啊!這是個問題。

代碼思路

小波變換與尺度函數
時間多的,或者想融匯貫通這段代碼的,點開上面這個鏈接,仔細看完,相信對你有很多幫助。我也是看了這篇文章對小波變換才知一二,沒時間的,或者喜歡我的(哈哈哈)可以看我接下來的總結(扯淡)。

首先,小波變換分為連續小波變換和離散小波變換,由于我們用于計算的信號都是經過采樣后的,所以接下來我們講離散小波變化,同樣代碼里用的也是離散小波變換,這里可能有同學就要問了,為什么不用連續小波變換?是不是瞧不起我!

那么這里簡單說一下,首先你怎么在代碼里實現積分?如果有寫過PID算法的同學可能知道,PID公式里也有積分,但是在代碼里我們把他轉變成了累加,這同時也是積分的意義,將坐標軸分成無限小的小段。。。扯遠了

好的,現在我們確定使用離散小波變換了。

大家可以看到上圖中信號輸出 f(t) 等于后面的一串式子,那么我們怎么計算f(t)呢?

很簡單,第一種方式,就按表達式算。那么我們是不是要有尺度函數小波函數?那從哪得到呢?萬能的淘寶也沒有,需要自己構建,怎么構建呢?小波變換與尺度函數 這個鏈接又來啦,詳見里面所述。總之就是太麻煩了,所以代碼里采用第二種方式。

第二種方式,設計低通濾波器h(k),利用魚骨型算法迭代計算。這個 h(k) 是什么呢?
h = [0.125,0.375,0.375,0.125];
沒錯,就是代碼里這個參數,代表尺度向量,至于參數初始值為什么是這個,則需要根據尺度函數需要滿足的3個條件來進行計算。
有了h和g后我們利用下面這個公式就可以一層層進行計算小波函數系數和尺度函數系數。

同樣這兩個公式在代碼里也有體現。分解尺度 j 也就是我們代碼里的循環次數。
到這里大家可能知道一些代碼為什么是這樣寫了,知道我們原來買菜是為了做飯,那又為什么要做飯呢?這個問題還得大家一起去探討。這里放幾個我在學習小波變換的邊緣檢測中遇到的好文章,共享。

文章1 這篇文章就是文中放過的
文章2 這篇文章在講相關參數 更深一點
文章3 這篇文章的5.2也有將代碼思路

————————20200206分割線———————

這篇文章是2019年10月6號寫的,也是我在CSDN上寫的第一篇文章,貢獻了博客一半的訪問量,今天是2020年2月6 號,這4個月期間也有斷斷續續了解一些小波變換邊緣檢測的新知識,比如說:

代碼思路部分:祖傳代碼不完整,其輸出是整個圖像中每個像素點的模值,之后還要加一個尋找模極大值的部分,這樣輸出的模極大值才是圖像邊緣。
代碼參數部分:濾波器的參數好像是B樣條小波,那么整個小波變換所使用的小波基函數也就是B樣條小波函數了。

有時候想重新寫一篇博客,把現在的見解完整的寫一遍,但是會發現不了解的東西還很多,小波變換比較新,雖然現在各行業應用的比較廣泛,但是感覺教程不是很多,就像小波變換邊緣檢測全網好像就這一份代碼。

努力吧,也不知道我什么時候可以摸透小波變換邊緣檢測,沖沖沖,也歡迎大家來找我交流,答疑和外包也可以。
個人QQ:1356580910,圖像處理探索群:913931535 備注:CSDN

現在基于祖傳代碼加入了兩種模極大值計算方法,一種需要手動調參,一種全自動計算。放一張現在的效果圖吧(好像還可以)

最后,希望趕快戰勝疫情,我想上學了。

總結

以上是生活随笔為你收集整理的基于小波变换的图像边缘检测(matlab祖传代码注释)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。