實驗三 圖像分割與描述

一、實驗目的:
(1)進一步掌握圖像處理工具Matlab,熟悉基于Matlab的圖像處理函數。
(2)掌握圖像分割方法,熟悉常用圖像描述方法。
二、實驗原理
1.膚色檢測
膚色是人類皮膚重要特征之一,在檢測人臉或手等目標時常采用膚色檢測的方法,將相關區域從圖像中分割出來。
膚色檢測方法:
膚色檢測方法有很多,但無論是基于不同的色彩空間還是不同的膚色模型,其根本出發點在于膚色分布的聚集性,即膚色的顏色分量一般聚集在某個范圍內。通過大量的膚色樣本進行統計,找出膚色顏色分量的聚集范圍或用特殊的分布模型去模擬膚色分布,進而實現對任意像素顏色的判別。
不同彩色空間膚色分布范圍:
① RGB彩色空間
據統計資料,膚色在RGB模型中的分布范圍基本滿足以下條件:
(1)在均勻光照下:R>95且G>40且B>20 且 max{R,G,B}一min{R,G,B}>15且|R一G|>15且R>G且R>B。
(2)在閃光或側向照明環境下:R>220且G>210且B>170且|R一G≤15且R>B且G>B。
② YCbCr彩色空間
據統計資料,膚色在YCbCr空間的分布范圍為77≤C,≤127,133≤C,≤173。
③ HSV彩色空間
HSV空間建立的膚色模型要求滿足0°≤H≤25°或335°≤H≤360°且0.2≤S≤0.6且0.4V。
膚色模型
膚色模型是根據大量樣本的統計數據建立以確定膚色的分布規律,進而判斷像素的色彩是否屬于膚色或與膚色相似程度的模型。常用的有闕值模型、高斯模型和橢圓模型。
1)閾值模型
國值模型是用數學表達式明確膚色分布范圍的建模方法。這類方法依據膚色分布范圍進行檢測,判斷簡單、明確、快捷,但需要選擇合適的顏色空間及合適的參數。
2)高斯膚色模型
利用高斯函數模擬膚色在CbCr色度空間的分布。
在這里插入圖片描述

其實,
在這里插入圖片描述

為色度向量的均值和協方差矩陣,可通過多種方式獲取,數值略有區別。
2.圖像平滑
圖像平滑是指受傳感器和大氣等因素的影響,遙感圖像上會出現某些亮度變化過大的區域,或出現一些亮點(也稱噪聲)。這種為了抑制噪聲,使圖像亮度趨于平緩的處理方法就是圖像平滑。圖像平滑實際上是低通濾波,平滑過程會導致圖像邊緣模糊化。
圖像平滑的方法包括:插值方法,線性平滑方法,卷積法等等。這樣的處理方法根據圖像噪聲的不同進行平滑,比如椒鹽噪聲,就采用線性平滑方法!
3.皮膚區域分割
所采取的膚色分割的方法為:首先根據膚色在RGB空間分布統計進行初略非膚色過濾,初步去除圖像中的非膚色;然后根據膚色在CgCr空間分布范圍統計,進行膚色的第二次分割,獲取膚色分割圖像;在對膚色區域進行中值濾波,提高膚色檢測率。
⑴基于RGB空間非膚色像素的初步過濾
對于圖像中一些非膚色的像素點,若呈現過紅、過藍、過綠等特征,可通過設置取值范圍初步過濾這些非膚色像素點。具體操作過程如下:
①據統計,人眼的像素具有特征:R<70,G<40,B<20.這樣使得眼睛更加容易提取像素,減少亮度低的像素被誤判為膚色像素的概率。
②據統計,過紅、過綠像素大多具有特征R+G>500,可剔除這些像素點。
③據統計,當R<160,G<160,B<160,過紅、過綠像素大多數具有R>G>B,可剔除這些像素點。
⑵基于YCgCr空間的膚色分割
膚色YCbCr顏色空間是一種常用的膚色檢測的色彩模型,其中Y代表亮度,Cr代表光源中的紅色分量,Cb代表光源中的藍色分量。人的膚色在外觀上的差異是由色度引起的,不同人的膚色分布集中在較小的區域內。膚色的YCbCr顏色空間CbCr平面分布在近似的橢圓區域內,通過判斷當前像素點的CbCr是否落在膚色分布的橢圓區域內,就可以很容易地確認當前像素點是否屬于膚色。將圖像轉換到YCbCr空間并且在CbCr平面進行投影,可以采集到膚色的樣本點。

將CbCr平面均分為許多小區域,將每個區域的中心點CbCr色度值作為當前區域的特征值,對膚色區域像素值進行遍歷,如果當前像素值落在該區域內則替換當前區域特征值。
RGB轉換為YCbCr
在這里插入圖片描述

4.圖像融合
圖像融合(Image Fusion) 是指綜合多幅輸入圖像的信息,以獲得更高質量輸出圖 像的過程與融合前的多幅圖像相比,融合后的圖像應更加適于進一步的觀察或處理。圖像融合屬于數字圖像處理領域,在計算攝影學中,用于拍攝所得圖像的后期處理。
5.圖像銳化
圖像銳化也稱邊緣增強。銳化技術用于加強圖像中的邊界和細節信息。由于邊界和細節信息對應頻域中的高頻部分,所以在頻域中通常對圖像進行高通濾波,在空間域則進行微分處理。為增加細節信息,采用了拉普拉斯算子進行圖像銳化。
Laplace算子
拉普拉斯(Laplace)是著名物理學家和數學家,laplace定義如下:
在這里插入圖片描述
對于離散函數f(i,j),laplace算子定義為:
在這里插入圖片描述

因為
在這里插入圖片描述

同理可得:
在這里插入圖片描述

由此可得Laplace算子矩陣為:
在這里插入圖片描述
三、實驗步驟(包括分析、代碼和波形)
首先來看看這個實驗的內容。利用人物正面照,參考例7.15實現皮膚美化處理,要求:
(1)濾波、色彩空間、代數運算、銳化等技術實現美化
(2)加入皮膚的亮白處理
(3)嘗試其他膚色檢測處理。
要求:實驗報告一份,源程序一份,實驗效果對比圖;

實驗的思路是很明確的,結合原理中的討論,我們只要按照題目的要求依據參考代碼、查看運行并進行驗證就可以了,不需要計算。
下面是第(1)小題的代碼。濾波、色彩空間、代數運算、銳化等技術實現美化;

clear,clc,close all;
ImageOrigin=im2double(imread('face.jpg'));
figure,imshow(ImageOrigin),title('原圖');
DBImage=DBfilt(ImageOrigin);SkinImage1=FirstFilter(ImageOrigin);            %%初步過濾
SkinArea=SecondFilter(SkinImage1);           %%YCgCr空間范圍膚色檢測SkinFuse=Fuse(ImageOrigin,DBImage,SkinArea);
SkinBeautify=Sharp(SkinFuse);function Out=DBfilt(In)[height,width,c] = size(In); win=15;       % 定義雙邊濾波窗口寬度  sigma_s=6; sigma_r=0.1; % 雙邊濾波的兩個標準差參數  [X,Y] = meshgrid(-win:win,-win:win); Gs = exp(-(X.^2+Y.^2)/(2*sigma_s^2));%計算鄰域內的空間權值    Out=zeros(height,width,c); for k=1:cfor j=1:height    for i=1:width  temp=In(max(j-win,1):min(j+win,height),max(i-win,1):min(i+win,width),k);Gr = exp(-(temp-In(j,i,k)).^2/(2*sigma_r^2));%計算灰度鄰近權值        % W為空間權值Gs和灰度權值Gr的乘積       W = Gr.*Gs((max(j-win,1):min(j+win,height))-j+win+1,(max(i-win,1):min(i+win,width))-i+win+1);      Out(j,i,k)=sum(W(:).*temp(:))/sum(W(:));            endend  endfigure,imshow(Out),title('雙邊濾波');
endfunction Out=FirstFilter(In)Out=In;[height,width,c] = size(In); IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);for j=1:heightfor i=1:widthif (IR(j,i)<160/255 && IG(j,i)<160/255 && IB(j,i)<160) && (IR(j,i)>IG(j,i) && IG(j,i)>IB(j,i))Out(j,i,:)=0;endif IR(j,i)+IG(j,i)>500/255Out(j,i,:)=0;endif IR(j,i)<70/255 && IG(j,i)<40/255 && IB(j,i)<20/255Out(j,i,:)=0;endendendfigure,imshow(Out);title('非膚色初步過濾'); 
endfunction Out=SecondFilter(In)IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);       [height,width,c] = size(In);Out=zeros(height,width);for i=1:widthfor j=1:height  R=IR(j,i); G=IG(j,i); B=IB(j,i);       Cg=(-81.085)*R+(112)*G+(-30.915)*B+128;  Cr=(112)*R+(-93.786)*G+(-18.214)*B+128;         if Cg>=85 && Cg<=135 && Cr>=-Cg+260 && Cr<=-Cg+280       Out(j,i)=1;          endendendOut=medfilt2(Out,[3 3]);figure,imshow(Out),title('YCgCr空間范圍膚色檢測');    
endfunction Out=Fuse(ImageOrigin,DBImage,SkinArea)Skin=zeros(size(ImageOrigin));Skin(:,:,1)=SkinArea;   Skin(:,:,2)=SkinArea;  Skin(:,:,3)=SkinArea;Out=DBImage.*Skin+double(ImageOrigin).*(1-Skin);figure,imshow(Out);title('膚色與背景圖像融合');
end
function Out=Sharp(In)H=[0 -1 0;-1 4 -1;0 -1 0]; %Laplacian銳化模板Out(:,:,:)=imfilter(In(:,:,:),H); Out=Out/3+In;
%     imwrite(Out,'man4.jpg');figure,imshow(Out),title('Laplacia銳化圖像');
end

下面是第(2)小題的代碼。加入皮膚的亮白處理;

rgb = imread('face.jpg');%讀取圖片
figure(1),subplot(2,2,1);imshow(rgb);title('原圖像');
[m,n,k] = size(rgb); %讀取圖片大小
hsv = rgb2hsv(rgb); %顏色空間轉換
H = hsv(:,:,1); % 色調
S = hsv(:,:,2); % 飽和度
V = hsv(:,:,3); % 亮度
for i = 1:m %遍歷每一個像素點,可以根據需要選擇自己需要處理的區域for j = 1: nhsv(i,j,3) =1.3* hsv(i,j,3); %1.3是需要增強的倍數,可以根據圖片情況動態調整end
endrgb1 = hsv2rgb(hsv); %轉為RGB,進行顯示
figure(1),subplot(2,2,2);imshow(rgb1);title('加亮圖像');

下面是第(3)小題的代碼。嘗試其他膚色檢測處理;

clear,clc,close all;
Image=imread('face.jpg');
figure,imshow(Image),title('原圖');
r=double(Image(:,:,1));             % 提取紅色分量并轉化為高精度
g=double(Image(:,:,2));
b=double(Image(:,:,3));
[N,M]=size(r);                      % 提取矩陣r的大小 NxM
miu=[117.4361 156.5599]';           % 高斯膚色模型均值
sigma=[160.1301 12.1430;12.1430 299.4574];      % 高斯膚色模型協方差矩陣
cbcr=zeros(2,1);                    % 生成 2x1矩陣
SkinCbCrG=zeros(N,M);               % 生成所有值為0的 NxM矩陣用于存放處理后圖像
SkinRGB=zeros(N,M);
SkinHSV=zeros(N,M);
SkinCbCr=zeros(N,M);
thresh=0.35;                        % 膚色概率二值化闕值
for i=1:M                           % 循環圖像每一個像素點   列循環for j=1:N                       % 行循環R=r(j,i);                    % 將圖像紅色分量中(j,i)點值賦值給RG=g(j,i);B=b(j,i);if (R>95 && G>40 && B>20 && (R-G)>15 && R-B>15) || ...               % RGB空間膚色檢測(R>220 && G>210 && B>170 && R-B<=15 && R>B && G>B)               % 符合RGB膚色檢測條件的像素點值置1則為白色,其他不符合條件的像素點為0黑色SkinRGB(j,i)=1;endmaxRGB=max(max(R,G),B);       % 取三分量中同一點最大值minRGB=min(min(R,G),B);       % 取三分量中同一點最小值C=maxRGB-minRGB;              % 取最大差值V=maxRGB;                     % 最大值賦值給參數Vif V==0                       % 比較最大值是否等于零  S=0;elseS=C/V;                    % 最大值不等于零則 C最大差值/V最大值endif maxRGB==R                  % 如果該點最大值==紅色分量值;作如下處理H=60*mod((G-B)/C,6);elseif maxRGB==G              % 如果該點最大值==綠色分量值;作如下處理H=60*((B-R)/C+2);elseif maxRGB==B              % 如果該點最大值==藍色分量值;作如下處理H=60*((R-G)/C+4);end                           % 符合HSV膚色檢測 將該點值置1if ((H>=0 && H<=25) || (H>=335 && H<=360)) && (S>=0.2 && S<=0.6) && V>=0.4SkinHSV(j,i)=1;          % 優化 HSV 效果增強?如何改?為什么這樣改?endR=R/255;G=G/255;B=B/255;             % RGB 轉 YCrCb 公式Cb=224*(-0.1687*R-0.3313*G+0.5*B)+128;Cr=224*(0.5*R-0.4187*G-0.0813*B)+128;if Cb>=77 && Cb<=127 && Cr>=133 && Cr<=173   % 符合 YCrCb膚色檢測 將該點值置1SkinCbCr(j,i)=1;endcbcr= [Cb Cr]';                               % YCbCr空間基于高斯模型的膚色檢測p=exp(-0.5*((cbcr-miu)')*(inv(sigma))*(cbcr-miu));   % 高斯模型函數if p>thresh                                    % p > 闕值0.35  值置1SkinCbCrG(j,i)=1;endend
end
figure,imshow(SkinRGB),title('RGB空間膚色檢測');
figure,imshow(SkinHSV),title('HSV空間膚色檢測');
figure,imshow(SkinCbCr),title('YCbCr空間范圍膚色檢測');
figure,imshow(SkinCbCrG),title('YCbCr空間高斯模型膚色檢測');
imwrite(SkinRGB,'skinrgb3.jpg');
imwrite(SkinHSV,'skinhsv3.jpg');
imwrite(SkinCbCr,'skincbcr3.jpg');
imwrite(SkinCbCrG,'skinCbCrG3.jpg');

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

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

相關文章

7.原 型

7.1原型 【例如】 另外- this指向&#xff1a; 構造函數和原型對象中的this都指向實例化的對象 7.2 constructor屬性 每個原型對象里面都有個constructor屬性( constructor構造函數) 作用&#xff1a;該屬性指向該原型對象的構造函數 使用場景: 如果有多個對象的方法&#…

Springboot 實踐(4)swagger-ui 測試controller

前文項目操作&#xff0c;完成了項目的創建、數據源的配置以及數據庫DAO程序的生成與配置。此文講解利用swagger-ui界面&#xff0c;測試生成的數據庫DAO程序。目前&#xff0c;項目swagger-ui界面如下&#xff1a; 以”用戶管理”為例&#xff0c;簡單講述swagger-ui測試數據庫…

無涯教程-Perl - s函數

描述 這不是功能。這是正則表達式替換運算符。根據PATTERN中指定的正則表達式,將數據替換為REPLACE。與m //一樣,分隔符由s后的第一個字符定義。 語法 以下是此函數的簡單語法- s/PATTERN/REPLACE/返回值 如果失敗,此函數返回0,如果成功,則返回替換次數。 例 以下是顯示…

筆記:移植xenomai到nuc972

xenomai是一個實時操作系統,想要使用它,先要移植I-pipe補丁 補丁在xenomai / ipipe-arm GitLab 我的內核是4.4-248的,合并上去會有幾個小錯誤,隨便改改就好 編譯內核沒有報錯之后,接下來需要修改arch/arm/mach-nuc970/time.c 修改方法參考補丁里面其它設備的定時器驅動,就…

學習Vue:數據綁定的基本概念

在 Vue.js 中&#xff0c;Vue 實例是您構建應用程序的核心。它允許您將數據和界面連接起來&#xff0c;實現動態的數據綁定&#xff0c;使您的應用程序能夠根據數據的變化自動更新界面。讓我們來深入了解 Vue 實例與數據綁定的基本概念。 Vue 實例與數據綁定 什么是 Vue 實例&…

OPC【2】——Relationships

引言 Relationships由一系列Relationship構成。將Abstract Package看做是一個圖數據結構&#xff0c;則Relationships是圖數據中的邊集合。 Package Relationships 對于Package Relationships&#xff0c;其所有引用關系的source對象為Abstract Package&#xff0c;或者看…

【Python機器學習】實驗10 支持向量機

文章目錄 支持向量機實例1 線性可分的支持向量機1.1 數據讀取1.2 準備訓練數據1.3 實例化線性支持向量機1.4 可視化分析 實例2 核支持向量機2.1 讀取數據集2.2 定義高斯核函數2.3 創建非線性的支持向量機2.4 可視化樣本類別 實例3 如何選擇最優的C和gamma3.1 讀取數據3.2 利用數…

Open3D 最小二乘擬合平面(SVD分解法)

目錄 一、算法原理二、代碼實現三、結果展示1、點云2、擬合結果四、優秀博客本文由CSDN點云俠原創,原文鏈接。爬蟲網站自重。 一、算法原理 本文實現矩陣奇異值分解方法的最小二乘擬合平面。原理如下: 對于得到的 n n

歐拉函數(質因子分解)

思路&#xff1a; (1)歐拉函數&#xff1a;輸入n則輸出1~n中與n互質的數的個數。 &#xff08;2&#xff09;計算公式&#xff1a; &#xff08;3&#xff09;證明&#xff1a;&#xff08;容斥原理&#xff09;對于n個數&#xff0c;先分別摘除所有被pi整除的數&#xff0c;…

億信ABI有什么不同,來看最新DEMO演示

為了給用戶營造更好的體驗環境&#xff0c;提供更豐富、更完善的服務&#xff0c;億信華辰旗下核心產品億信ABI DEMO再次上新啦&#xff01;本次億信ABI DEMO環境在原有基礎上煥新升級&#xff0c;帶來了全新的主視覺界面、豐富的行業應用和功能演示DEMO&#xff0c;我們一起來…

季度到季度的組件選擇

組件&#xff1a;<template><div class"quarter"><div class"input-wrap" id"closeId" mouseover"handler" click.stop"btn" :style"{color:colorItem}"><i class"el-icon-date"&…

【Java】BF算法(串模式匹配算法)

?? 什么是BF算法 BF算法&#xff0c;即暴力算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是將目標串S的第一個與模式串T的第一個字符串進行匹配&#xff0c;若相等&#xff0c;則繼續比較S的第二個字符和T的第二個字符&#xff1b;若不相等&#xff0c;則…

【計算機視覺|生成對抗】用深度卷積生成對抗網絡進行無監督表示學習(DCGAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 鏈接&#xff1a;[1511.06434] Unsupervised Representation Learning with Deep Conv…

騰訊云CVM服務器競價實例是什么?和按量計費有什么區別?

騰訊云服務器CVM計費模式分為包年包月、按量計費和競價實例&#xff0c;什么是競價實例&#xff1f;競價實例和按量付費相類似&#xff0c;優勢是價格更劃算&#xff0c;缺點是云服務器實例有被自動釋放風險&#xff0c;騰訊云服務器網來詳細說下什么是競價實例&#xff1f;以及…

NLP——操作步驟講義與實踐鏈接

數據集與語料 語料是NLP的生命之源&#xff0c;所有NLP問題都是從語料中學到數據分布的規律語料的分類&#xff1a;單語料&#xff0c;平行語料&#xff0c;復雜結構 語料的例子&#xff1a;Penn Treebank, Daily Dialog, WMT-1x翻譯數據集&#xff0c;中文閑聊數據集&#xf…

大數據:Numpy基礎應用詳解

Numpy基礎應用 Numpy 是一個開源的 Python 科學計算庫&#xff0c;用于快速處理任意維度的數組。Numpy 支持常見的數組和矩陣操作&#xff0c;對于同樣的數值計算任務&#xff0c;使用 NumPy 不僅代碼要簡潔的多&#xff0c;而且 NumPy 的性能遠遠優于原生 Python&#xff0c;…

mysql-5.5.62-win32安裝與使用

1.為啥是這個版本而不是當前最新的8.0&#xff1f; 因為我要用32位。目前mysql支持win32的版本最新只到5.7.33。 首先&#xff0c;到官網MySQL :: MySQL Downloads 然后選 選一個自己喜歡的版本就好。我這里是如標題版本。下載32位的zip。然后回來解壓。 完了創建系統環境變…

項目實施方案案例模板-拿來即用

《項目實施方案》實際案例模板&#xff0c;拿來即用&#xff0c;原件可獲取。 項目背景 項目目標 項目范圍 項目總體計劃 項目組織架構 5.1. 項目職責分工 項目風險點 6.1. 項目風險分析 6.2. 項目實施關鍵點 項目管理規范 7.1. 項目實施約束 7.2. 項目變更凍結 7…

(三) CUDA 硬件實現

一組帶有on-chip 共享內存的SIMD多處理器 GPU可以被看作一組多處理器, 每個多處理器使用單一指令&#xff0c;多數據架構(SIMD)【單指令流多數據流】 在任何給定的時鐘周期內&#xff0c;多處理器的每個處理器執行同一指令&#xff0c;但操作不同的數據 每個多處理器使用以下…

HASH索引,AVL樹,B樹,B+樹的區別?

1. 什么是 Hash 1.1 Hash 函數 Hash 本身其實是一個函數&#xff0c;又被稱為散列函數&#xff0c;它可以大幅提高我們對數據的檢索效率。因為它是散列的&#xff0c;所以在存儲數據的時候&#xff0c;它也是無序的。 Hash 算法是通過某種確定性的算法(例如MD5&#xff0c;S…