對圖像中多個目標進行標記
找到每一個目標的最小外接矩形
然後提取其灰度特徵
實例如下
多個不規則圖像目標
圖像目標
前景背景分離程序設計
<code>clear all;clc;I_gray=imread('C:\\Users\\Administrator\\Desktop\\演示文稿1.jpg');%灰度圖像I_gray = rgb2gray(I_gray);figure,imshow(I_gray); %求二值化的閾值level=graythresh(I_gray); [height,width]=size(I_gray);%二值化圖像bw=im2bw(I_gray,level); figure,imshow(bw); %顯示二值化圖像%二值化取反bw = 1-bw;%標註二進制圖像中已連接的部分[L,num]=bwlabel(bw,8); %封裝函數獲取各種參數信息stats_1 = regionprops(L,'Area','PixelList','Centroid','BoundingBox');%繪製質心座標Cen_1 = cat(1,stats_1.Centroid);figure(3),imshow(bw);hold on ;for i=1:length(stats_1) plot(Cen_1(i,1), Cen_1(i,2), 'r+'); end%繪製最小外接矩形框Temp_1 = cat(1,stats_1.BoundingBox);for i=1:length(stats_1) temp = Temp_1(i,:); rectangle('position',temp,'edgecolor','r');end %標記外接矩形框起始點座標for i = 1:length(stats_1) plot(Temp_1(i,1),Temp_1(i,2),'g+'); text(stats_1(i).BoundingBox(1)-10,stats_1(i).BoundingBox(2),num2str(i),'Color','y','FontSize',12);endhold on;%依照矩形框提取原始圖像灰度信息Temp_qz = fix(Temp_1);gray_x = cell(num,1);%基於最小外接矩形提取原圖像目標區域for i = 1:num gray_x{i,1}= I_gray(Temp_qz(i,2):(Temp_qz(i,2)+Temp_qz(i,4)),Temp_qz(i,1):(Temp_qz(i,1)+Temp_qz(i,3))); %figure,imshow(gray_x{i,1}),hold on;end%基於最小外接矩形提取二值化目標區域gray_y = cell(num,1);for i = 1:num gray_y{i,1}= bw(Temp_qz(i,2):(Temp_qz(i,2)+Temp_qz(i,4)),Temp_qz(i,1):(Temp_qz(i,1)+Temp_qz(i,3))); figure,imshow(gray_x{i,1}),hold on;end%基於最小外接矩形前景背景分離for i = 1:num gray_xy{i,1}= double(gray_x{i,1}).* double(gray_y{i,1}); figure,imshow(gray_x{i,1}),hold on;end/<code>
運行程序
繪製最小外接矩形區域
運行
動態顯示
標記的目標圖像1
單獨顯示
灰度直方圖
<code>%顯示第一個目標未去除背景與去除背景後的灰度直方圖imshow(gray_x{1,1});figure,imhist(gray_x{1,1}),axis([0,255,0,120]);I = uint8(gray_xy{1,1});figure,imhist(I),axis([0,255,0,120]);/<code>
圖像背景未去除
像素集中分佈於兩極
合乎情理
去除背景之後
僅有單側有灰度數值顯示
此時可以對多目標域
進行求取灰度均值
<code>%求取目標區域灰度均值MEAN_1 = cell(num,1);for i = 1:num o = nnz(gray_xy{i,1}); MEAN_1{i,1} = sum(sum(gray_xy{i,1}))/o;end/<code>
輸出
灰度均值數值
THE
END
閱讀更多 機械之路 的文章