實驗5 圖像分割

1. 實驗目的

①掌握圖像分割的含義與目的;
②掌握迭代法、最大類間方差法、直方圖法等閾值分割方法;
③掌握霍夫變換、區域生長法、區域分裂與合并法的原理,并能編程實現。

2. 實驗內容

①調用Matlab / Python+OpenCV中的相關函數,分別通過實驗法、直方圖法、大津算法確定閾值,實現圖像的全局閾值分割。
②調用Matlab / Python+OpenCV中的霍夫變換函數,檢測圖像中的直線和圓。
③自行編寫代碼,實現區域生長法及區域分裂與合并算法。

3. 實驗過程

3.1 全局閾值分割
3.1.1迭代法

初始化一個閾值,通過迭代法求出最佳閾值,使用最佳閾值對圖像進行分割,并顯示原圖和分割結果(參考圖1)。
(1) 主要調用的函數、功能及參數說明

函數名函數功能參數說明
imread(A)讀取圖片A:圖片在文件夾的位置
rgb2gray(A)灰度轉化A:圖片
mean(A)求列或行的平均數A:矩陣
mean2(image)對整一個矩陣求像素平均值image:圖片
find(A)查找非零元素的索引和值A:查找條件
abs(A)返回數組A中每個元素的絕對值和復數的模A:矩陣
(2) 源代碼及實驗結果(添加必要注釋)
A= imread('lena.png');
image=rgb2gray(A);%灰度轉化
T=mean2(image);%取均值作為初始閾值
done=false;%定義跳出循環的量i=0;
%while循環進行迭代
while ~doner1=find(image<=T);%小于閾值的部分r2=find(image>T);%大于閾值的部分Tnew=(mean(image(r1))+mean(image(r2)))/2;%計算分割后兩部分的閾值均值的均值done=abs(Tnew-T)<1;%判斷迭代是否收斂T=Tnew;%如不收斂,則將分割后的均值的均值作為新的閾值進行循環計算i=i+1;
end
%這兩步是將圖像轉換成二值圖像
image(r1)=0;%將小于閾值的部分賦值為0
image(r2)=1;%將大于閾值的部分賦值為1   subplot(121);imshow(A);title('原圖')
subplot(122);imshow(image,[]);title('迭代處理后')

在這里插入圖片描述
(3) 總結(總結實驗法步驟,對實驗結果進行分析)
當目標與背景的面積相差較大時,更好地選擇是將初始閾值T設置為最大灰度值和最小灰度值的中間值。

3.1.2最大類間方差法

使用最大類間方差法求出最佳閾值后,使用最佳閾值對圖像進行分割,并顯示原圖和分割結果(參考圖2)
(1) 主要調用的函數、功能及參數說明

函數名函數功能參數說明
graythresh采用OTSU算法來獲取全局閾值,自動選取閾...

(2) 源代碼及實驗結果(添加必要注釋)

I = imread('lena.png');
T = graythresh(I); %采用OTSU算法來獲取全局閾值,自動選取閾值
K = im2bw(I, T);%二值化
figure;
subplot(121), imshow(I);title('原圖')
subplot(122), imshow(K);title('最大類間方差法')

在這里插入圖片描述
(3) 總結(總結最大類間差分算法步驟,對實驗結果進行分析)
最大類間差分算法是根據圖像的灰度特性,將圖像分為前景和背景兩個部分。當取最佳閾值時,兩部分之間的差別應該是最大的,前景和背景之間的類間方差如果越大,就說明構成圖像的兩個部分之間的差別越大。

3.1.3直方圖法

首先得到圖像的直方圖,選出最佳閾值后,使用最佳閾值對圖像進行分割,并顯示原圖和分割結果(參考下圖)。

在這里插入圖片描述
(1) 主要調用的函數、功能及參數說明

函數名函數功能參數說明
imread(A)讀取圖片A:圖片在文件夾的位置
rgb2gray(A)灰度轉化A:圖片

(2) 源代碼及實驗結果(添加必要注釋)

A = imread('lena.png');
image=rgb2gray(A);%灰度轉化[m,n]=size(image);%測量圖像尺寸參數
GK=zeros(1,256); %預創建存放灰度出現概率的向量
for k=0:255GK(k+1)=length(find(image==k))/(m*n);%計算每級灰度出現的概率,將其存入GK中相應位置
endsubplot(2,2,1);imshow(image);title('灰度圖像')
grid on;%顯示網格線
axis on;%顯示坐標系subplot(2,2,2),bar(0:255,GK,'g')%繪制直方圖
title('灰度直方圖')
xlabel('灰度值')
ylabel(' 出現概率')image2=im2bw(A,150/255);
subplot(2,2,3),imshow(image2);title('閾值150的分割圖像')
grid on;
axis on;image3=im2bw(A,200/255);
subplot(2,2,4),imshow(image3);title('閾值200的分割圖像')
grid on;
axis on;

在這里插入圖片描述
(3) 總結(總結直方圖法步驟,對實驗結果進行分析)
圖像分割是圖像識別的基礎,對圖像進行圖像分割,將目標從背景區域中分離出,可以避免圖像識別時在圖像上進行盲目的搜索,大大提高圖像識別的效率以及識別準確率。基于灰度直方圖的閾值分割計算簡單,適用于目標與背景分布于不同灰度范圍的灰度圖像,特別是遙感圖像。

3.2 霍夫變換
3.2.1 調用霍夫變換函數檢測直線和圓

如下圖所示,調用 Matlab/Python+OpenCV中的霍夫變換函數,檢測圖像中的直線和圓。

在這里插入圖片描述
(1) 主要調用的函數、功能及參數說明

函數名函數功能參數說明
imread(A)讀取圖片A:圖片在文件夾的位置

(2) 源代碼及實驗結果(添加必要注釋)

①直線檢測代碼及實驗結果:

A= imread('lena.png');I=rgb2gray(A);%灰度轉化BW = edge(I,'canny');%Canny方法提取圖像邊界,返回二值圖像(邊界1,否則0)
[H,T,R] = hough(BW);%計算二值圖像的標準霍夫變換,H為霍夫變換矩陣,I,R為計算霍夫變換的角度和半徑值
P = houghpeaks(H,3);%提取3個極值點
x = T(P(:,2)); 
y = R(P(:,1));
lines=houghlines(BW,T,R,P);%提取線段subplot(1,2,1);imshow(A);title('原圖')
subplot(1,2,2);imshow(I);title('直線檢測')
hold on;for k = 1:length(lines)
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

在這里插入圖片描述
②圓形檢測代碼及實驗結果:

rgb= imread('lena.png');
image = rgb2gray(rgb);
imshow(image)d = imdistline(gca);
delete(d)
[centersBright,radiiBright,metricBright] = imfindcircles(rgb,[55 90],'ObjectPolarity','dark','Method','TwoStage','Sensitivity',0.94,'EdgeThreshold',0.1);
hBright = viscircles(centersBright, radiiBright,'Color','b');
b=length(radiiBright);
total_number=b;

在這里插入圖片描述
③總結(總結霍夫變換檢測步驟,并對實驗結果進行分析)
霍夫變換的過程是在一個參數空間中通過計算累計結果的局部最大值得到一個符合該特定形狀的集合作為霍夫變換結果,該方法可以進行圓,直線,橢圓等形狀的檢測。

3.2.2 實現極坐標系下的霍夫變換(參考圖5,6)

在這里插入圖片描述
⑴ 源代碼及實驗結果(添加必要注釋)

A= imread('lena.png');
I=rgb2gray(A);%灰度轉化BW = edge(I,'canny');%Canny方法提取圖像邊界,返回二值圖像(邊界1,否則0)
[H,T,R] = hough(BW);%計算二值圖像的標準霍夫變換,H為霍夫變換矩陣,I,R為計算霍夫變換的角度和半徑值subplot(1,2,1);imshow(A);title('原圖')
subplot(1,2,2);imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');%hough變換的圖像
title('霍夫變換結果')
xlabel('\theta'), ylabel('\rho');
axis on,axis square,hold on;

在這里插入圖片描述
⑵ 總結(總結極坐標下霍夫變換步驟,對實驗結果進行分析)
圖像x?yx?y坐標空間中,經過點(xi,yi)(xi,yi)的直線表示為:yi=axi+b(1),yi=axi+b(1)。其中,參數a為斜率,b為截矩。其中,參數a為斜率,b為截矩。通過點(xi,yi)點(xi,yi)的直線有無數條。變換到了參數平面a?ba?b。這個變換就是直角坐標中對于(xi,yi)(xi,yi)點的Hough變換。

3.3 區域生長法

分別使用不同生長準則實現區域生長算法(參考圖7)
在這里插入圖片描述
⑴ 源代碼及實驗結果(添加必要注釋及結果圖)

I=imread('lena.png');if isinteger(I)I=im2double(I);
end
I = rgb2gray(I);figure 
imshow(I)
[M,N]=size(I);
[y,x]=getpts; %單擊取點后,按enter結束
x1=round(x);
y1=round(y);
seed=I(x1,y1); %獲取中心像素灰度值J=zeros(M,N);
J(x1,y1)=1;count=1; %待處理點個數
threshold=0.15;
while count>0count=0;for i=1:M %遍歷整幅圖像for j=1:Nif J(i,j)==1 %點在“棧”內if (i-1)>1&(i+1)<M&(j-1)>1&(j+1)<N %3*3鄰域在圖像范圍內for u=-1:1 %8-鄰域生長for v=-1:1if J(i+u,j+v)==0&abs(I(i+u,j+v)-seed)<=thresholdJ(i+u,j+v)=1;count=count+1;  %記錄此次新生長的點個數endendendendendendend
endsubplot(1,2,1),imshow(I);title('原圖')
subplot(1,2,2),imshow(J);title('區域生長實現')

在這里插入圖片描述

4. 實驗小結

①分析和總結全局閾值分割的幾種實驗結果,能夠得到哪些啟發或結論?
答:在上面的圖像分割中,通過不同的閾值處理方法,得到良好的圖像分割結果。不難發現, 對于不同的噪聲環境和光照影響等等,一種單一的閾值分割方法往往無法出色的完成任務。
在今后的實驗中,要合理的根據自己的圖像樣本來選擇合理的算法。例如是否需要對圖像進行平滑去噪,是否需要圖像分區來使光照近似均勻。不僅要掌握上面的處理方法,也明白了為什么對上面的圖像進行這樣的處理和分析。
②當圖片過曝或者過暗造成霍夫變換檢測效果不理想時,可以采用哪些圖像處理方法提升效果?
答:依賴直方圖來調整圖像強度值
③查閱相關資料,了解更多的圖像分割方法,并從原理和結果等方面對比它們之間的異同。
答:
(1)基于闞值的分割方法是按照原圖像的灰度特征劃分出一個或者幾個灰度閾值將原圖像的每個像素的灰度值與灰度閾值進行比較,繼而確定每個像素應該位于哪個區域。
(2)基于邊緣的圖像分割
邊緣是指一個區域的結束與另一個區域的開始,也就是說圖像邊緣代表的是兩個不同的區域邊界線上的一些像素的集合,它一般代表著圖像的灰度、紋路、顏色發生了一些突變,是圖像局部特征不連續的體現。基于邊緣的圖像分割方法一般是基于圖像灰度值檢測的分割方法,即圖像邊緣是圖像灰度值發生突變的一個轉折,圖像邊緣有兩個要素:幅度與方向。沿著邊緣的方向,灰度值的變化比較小,垂直于邊緣的方向,灰度值的變化比較大。因此我們可以對像素的灰度值進行求導來判斷圖像的邊緣。
(3)基于區域的分割方法
區域生長指的是根據同一區域內像素具有一些相似的性質(灰度值、紋路、顏色)來聚集像素點的一種方法。我們可以從一個像素或者是一塊很小的區域開始,將周圍具有相同性質的像素或者區域劃入到目前的區域當中,直到沒有其他的像素或者是區域能夠劃入到當前區域為止,以此來實現區域不斷增長的過程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38389.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx優勢以及應用場景,編譯安裝和nginx

一. Nginx是什么&#xff1f; 1. Nginx概述 高性能、輕量級Web服務軟件系統資源消耗低對HTTP并發連接的處理能力高單臺物理服務器可支持30,000&#xff5e;50,000個并發請求Nginx&#xff08;發音同 “engine x”&#xff09;是一個高性能的反向代理和Web服務器軟件&#xff0c…

OffscreenCanvas:Web Workers 中的畫布操作

在 Web 開發中&#xff0c;我們經常需要處理復雜的圖形和動畫&#xff0c;這些操作可能會影響頁面的性能和用戶體驗。為了解決這個問題&#xff0c;現代瀏覽器引入了 OffscreenCanvas 接口&#xff0c;它允許我們在后臺線程&#xff08;Web Workers&#xff09;中進行畫布操作&…

python教程---網絡爬蟲

7.1 urllib Urllib是Python內置的一個用于讀取來自Web的數據的庫。它是一個請求庫&#xff0c;可以用來發送HTTP請求&#xff0c;獲取網頁內容&#xff0c;支持多種HTTP方法&#xff0c;如GET和POST等。 使用Urllib讀取網頁內容的步驟如下&#xff1a; 導入Urllib庫中的reque…

Redis--18--Redis Desktop Manage下載與安裝

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 Redis Desktop Manage1.官網下載https://redis.io/insight/ 2.安裝方法3.使用方法3.1.進入RedisDesktopManager的主界面3.2 新建連接3.3 支持操作 Redis Desktop Ma…

J021_QQ號格式校驗

一、需求描述 校驗QQ號碼是否正確。要求全部是數字&#xff0c;數字長度&#xff08;6-20位之間&#xff09;&#xff0c;不能以0開頭。 二、代碼實現 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽車尾燈(轉向燈)電路設計

即當汽車進行轉彎時,司機打開轉向燈,尾燈會根據轉向依次被點亮,經過一定的間隔后,再全部被消滅。不停地重復,直到司機關閉轉向燈。 該效果可由以下電路實現: 完整電路圖: 02—電路設計要點 延時電路的要點主要有兩個: 一、當轉向開關被按下時,LED需要逐個亮起; 二、LED被逐…

uniapp 使用cavans 生成海報

uniapp 使用cavans 生成海報 npm install qs-canvas1.創建 useCanvas.js /*** Shopro qs-canvas 繪制海報* version 1.0.0* author lidongtony* param {Object} options - 海報參數* param {Object} vm - 自定義組件實例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler啟動失敗報錯

在銀河麒麟V10安裝完NVIDIA后&#xff0c;想著試著運行一下NVIDIA Visual Profiler&#xff0c;發現報錯&#xff0c;如下圖。 照著提示翻閱日志文件。看見其中寫著 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

簡介 其提供了并發處理事件的能力 結構 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R學習資源及R包安裝

轉自生信師兄 生信必備技巧之R語言基礎教程 1. 學習資源 推薦書籍&#xff1a;R語言實戰&#xff0c;R數據科學等等&#xff1b; 這兩本書在公眾號【生信師兄】都有pdf版&#xff0c;有需要的可以關注公眾號【生信師兄】并回復&#xff1a;“R語言”&#xff0c;即可獲得免費…

【自然語言處理】預訓練語言模型實現與應用

預訓練語言模型實現與應用 1 任務目標 1.1 案例簡介 ? 2018年&#xff0c;Google提出了預訓練語言模型BERT&#xff0c;該模型在各種NLP任務上都取得了很好的效果。與此同時&#xff0c;它的使用十分方便&#xff0c;可以快速地對于各種NLP任務進行適配。因此&#xff0c;B…

《每天5分鐘用Flask搭建一個管理系統》第8章:權限管理

第8章&#xff1a;權限管理 8.1 權限管理的概念 權限管理是控制用戶對應用內不同資源訪問的機制。它確保用戶只能訪問他們被授權的資源。 8.2 Flask-Principal擴展的使用 Flask-Principal是一個提供權限管理功能的Flask擴展&#xff0c;它允許您定義角色和權限&#xff0c;…

基于HarmonyOS NEXT開發智能提醒助手

目錄 目錄 目錄 前言 關于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手設計 1、系統架構 2、功能模塊 智能提醒助手的應用場景 智能提醒助手的競爭力 具體技術實現 未來展望 結束語 前言 隨著智能設備的普及和物聯網技術的飛速發展&#xff0c;人們對于智能…

基于大津閾值法和二值化與聯通區域標記進行圖像目標計數

1 建模 A.讀取圖像&#xff1a; 1.使用imread函數讀取圖像文件。 2.如果圖像是彩色的&#xff0c;通常需要先轉換為灰度圖像&#xff0c;因為大津閾值法通常應用于灰度圖像。 B.灰度化&#xff1a; 1&#xff0e;如果圖像是彩色的&#xff0c;使用rgb2gray函數將其轉換為灰度…

《昇思25天學習打卡營第16天 | 昇思MindSpore基于MobileNetv2的垃圾分類》

16天 本節學習了垃圾分類代碼開發的方法。通過讀取本地圖像數據作為輸入&#xff0c;對圖像中的垃圾物體進行檢測&#xff0c;并且將檢測結果圖片保存到文件中。 MobileNet網絡是由Google團隊于2017年提出的專注于移動端、嵌入式或IoT設備的輕量級CNN網絡&#xff0c;相比于傳…

Excel顯示/隱藏批注按鈕為什么是灰色?

在excel中&#xff0c;經常使用批注來加強數據信息的提示&#xff0c;有時候會把很多的批注顯示出來&#xff0c;但是再想將它們隱藏起來&#xff0c;全選工作表后&#xff0c;“顯示/隱藏批注”按鈕是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408計算機組成原理】微程序設計重要考點指令流水線考研真題+考點分析

蘇澤 “棄工從研”的路上很孤獨&#xff0c;于是我記下了些許筆記相伴&#xff0c;希望能夠幫助到大家 目錄 微指令的形成方式 微指令的地址形成方式 對應考題 題目&#xff1a;微指令的地址形成方式 - 斷定方式 解題思路&#xff1a; 答題&#xff1a; 分析考點&…

每日疑問,多線程場景,下面的代碼是否可以保證只執行一次

看著這個代碼的目的是只注冊一次sighandler&#xff0c;但是這個判定是否可以保證一次&#xff1f;但是根據代碼看&#xff0c;其實不會有關鍵區的讀寫&#xff0c;所以即使有同步問題&#xff0c;也不會產生什么特別的影響。所以代碼沒有問題&#xff0c;但是這是一個坑。 in…

Spring Boot中的分頁與排序實現

Spring Boot中的分頁與排序實現 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;在開發Web應用時&#xff0c;分頁和排序是常見的功能需求&#xff0c;特別是在處…

計算機體系結構和指令系統

1.計算機體系結構 - 五大部件 - 馮 諾依曼 計算機的特點 1.計算機有五大部件組成 2.指令和數據以同等地位存儲于存儲器&#xff0c;可按照地址訪問 3.指令和數據用二進制表示 4.指令由操作碼和地址碼組成 5。存儲程序 6.以計算器為中心&#xff08;輸入、輸出設備與存儲器…