国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別

這篇具有很好參考價值的文章主要介紹了車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

那么這里博主先安利一些干貨滿滿的專欄了!

這兩個都是博主在學(xué)習(xí)Linux操作系統(tǒng)過程中的記錄,希望對大家的學(xué)習(xí)有幫助!

操作系統(tǒng)Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482Linux Syshttps://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482這兩個是博主學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的同時,手撕模擬STL標(biāo)準(zhǔn)模版庫各種容器的專欄。

STL源碼剖析https://blog.csdn.net/yu_cblog/category_11983210.html?spm=1001.2014.3001.5482手撕數(shù)據(jù)結(jié)構(gòu)https://blog.csdn.net/yu_cblog/category_11490888.html


一、摘要?

本次實驗,通過學(xué)習(xí)邊緣檢測的原理,使用Matlab編程語言,完成對輸出給定圖像的邊緣檢測圖像和完成車道線識別。

二、實驗內(nèi)容及目的

輸出給定圖像的邊緣檢測圖像和完成車道線識別。

三、實驗相關(guān)原理描述

邊緣檢測是一種圖像處理技術(shù),用于在圖像中檢測出物體或場景的邊緣或輪廓。其原理是通過分析圖像中的亮度或顏色變化來識別邊緣位置。常用的邊緣檢測方法包括Sobel、Prewitt、Canny等。

下面是本次實驗主要流程:

車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別,人工智能,計算機(jī)視覺,人工智能

主要步驟原理?

高斯濾波:

高斯濾波是一種常用的圖像處理技術(shù),用于平滑圖像、去除噪聲和邊緣檢測等應(yīng)用。它基于高斯函數(shù)(也稱為正態(tài)分布函數(shù))的概念,通過對圖像中的像素進(jìn)行加權(quán)平均來實現(xiàn)平滑效果。

高斯濾波的公式如下:
車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別,人工智能,計算機(jī)視覺,人工智能

其中,G(x,y) 表示高斯濾波器在坐標(biāo)(x,y) 處的權(quán)重值,σ 表示高斯函數(shù)的標(biāo)準(zhǔn)差,控制了濾波器的模糊程度。標(biāo)準(zhǔn)差越大,濾波器的模糊程度越高。

高斯濾波的原理是利用高斯函數(shù)的權(quán)重值對圖像中的像素進(jìn)行加權(quán)平均。濾波器的中心像素權(quán)重最大,越遠(yuǎn)離中心像素的像素權(quán)重越小。通過對鄰近像素進(jìn)行加權(quán)平均,可以使圖像中的噪聲平均化,并且能夠保留圖像的整體結(jié)構(gòu)和邊緣特征。

Sobel算子計算梯度:

水平方向的 Sobel 算子:

垂直方向的Sobel算子:

這些模板是 3x3 的矩陣,分別對應(yīng)著水平和垂直方向上的微分操作。通過將這些模板與圖像進(jìn)行卷積操作,可以得到圖像在水平和垂直方向上的梯度值。

非極大值抑制:

非極大值抑制可以用來尋找像素點局部最大值,將非極大值所對應(yīng)的灰度值置0,極大值點置1,這樣可以剔除一大部分非邊緣的像素點,從而得到一副二值圖像,邊緣理想狀態(tài)下都為單像素邊緣。
車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別,人工智能,計算機(jī)視覺,人工智能

四、實驗過程和結(jié)果

% 讀取圖片
img = imread('圖像路徑');
imshow(img);
% 將圖像轉(zhuǎn)換為灰度
gray_img = rgb2gray(img);
% 高斯濾波
sigma = 2; % 高斯濾波器的標(biāo)準(zhǔn)差
gaussian_filtered_img = imgaussfilt(gray_img, sigma);
% 使用Sobel算子進(jìn)行梯度計算
sobel_filtered_img = double(edge(gaussian_filtered_img, 'sobel'));
% 顯示原始圖像和處理后的圖像
imshow(img); title('原始圖像');
imshow(sobel_filtered_img); title('梯度計算后的圖像');
% 定義梯度方向
directions = [-pi/2, -pi/4, 0, pi/4, pi/2, 3*pi/4, pi, -3*pi/4];

% 對每個像素,找到沿著梯度方向的兩個相鄰像素,計算它們的插值
nms_img = zeros(size(sobel_filtered_img));
for i=2:size(sobel_filtered_img,1)-1
    for j=2:size(sobel_filtered_img,2)-1
        % 找到最近的兩個方向
        [~, index] = min(abs(directions - atan2d(-sobel_filtered_img(i,j), sobel_filtered_img(i,j+1))));
        if index == 1 || index == 5
            left = sobel_filtered_img(i-1,j-1);
            right = sobel_filtered_img(i+1,j+1);
        elseif index == 2 || index == 6
            left = sobel_filtered_img(i-1,j+1);
            right = sobel_filtered_img(i+1,j-1);
        elseif index == 3 || index == 7
            left = sobel_filtered_img(i,j-1);
            right = sobel_filtered_img(i,j+1);
        elseif index == 4 || index == 8
            left = sobel_filtered_img(i+1,j-1);
            right = sobel_filtered_img(i-1,j+1);
        end
        
        % 如果像素值是局部最大值,則保留
        if sobel_filtered_img(i,j) >= left && sobel_filtered_img(i,j) >= right
            nms_img(i,j) = sobel_filtered_img(i,j);
        end
    end
end

% 顯示非極大值抑制后的圖像
figure; imshow(nms_img); title('非極大值抑制后的圖像');
% 閾值滯后處理
low_threshold = 0.05;
high_threshold = 0.2;
edge_map = zeros(size(nms_img));
edge_map(nms_img > high_threshold) = 1;
for i=2:size(nms_img,1)-1
    for j=2:size(nms_img,2)-1
        if (nms_img(i,j) > low_threshold) && (edge_map(i,j) == 0)
            if (edge_map(i-1,j-1) == 1) || (edge_map(i-1,j) == 1) || (edge_map(i-1,j+1) == 1) || (edge_map(i,j-1) == 1) || (edge_map(i,j+1) == 1) || (edge_map(i+1,j-1) == 1) || (edge_map(i+1,j) == 1) || (edge_map(i+1,j+1) == 1)
                edge_map(i,j) = 1;
            end
        end
    end
end
imshow(edge_map);

% 孤立弱邊緣抑制
isolated_threshold = 1;
for i=2:size(edge_map,1)-1
    for j=2:size(edge_map,2)-1
        if (edge_map(i,j) == 1) && (sum(sum(edge_map(i-1:i+1,j-1:j+1))) <= isolated_threshold)
            edge_map(i,j) = 0;
        end
    end
end
imshow(edge_map);
% 車道線檢測
% [m,n] = size(edge_map)
% x = [1600,0,0,1600];
% y = [1000,0,0,1000];
% mask = poly2mask(x,y,m,n);
% new_img = mask.*edge_map;
% imshow(new_img);

new_img = edge_map;
lines = HoughStraightRecognize(new_img);

hold on;
imshow(img);
for k = 1:length(lines)
% k = 7;
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
end

function lines = HoughStraightRecognize(BW)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%該函數(shù)為霍夫變換識別直線的函數(shù)
%input:圖像(可以是二值圖,也可以是灰度圖)
%output:直線的struct結(jié)構(gòu),其結(jié)構(gòu)組成為線段的兩個端點
%以及在極坐標(biāo)系下的坐標(biāo)【rho,theta】
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    [H,T,R] = hough(BW);
    % imshow(H,[],'XData',T,'YData',R,...
    %             'InitialMagnification','fit');
    % xlabel('\theta'), ylabel('\rho');
        % axis on, axis normal, hold on;
    P  = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
    %x = T(P(:,2)); y = R(P(:,1));
    %plot(x,y,'s','color','white');
    lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
    %FillGap 兩個線段之間的距離,小于該值會將兩個線段合并
    %MinLength 最小線段長度
end

實驗過程所得到輸出圖像如下圖所示:

車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別,人工智能,計算機(jī)視覺,人工智能文章來源地址http://www.zghlxwxcb.cn/news/detail-599629.html

到了這里,關(guān)于車道線檢測|利用邊緣檢測的原理對車道線圖片進(jìn)行識別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包