1樓:
假設你的二值bai影象變數
為du「bw」,則數值為「zhi1」的畫素個數(設變數dao「numval_1」)是:專
numval_1 = sum(sum(bw));
連用兩次sum是將影象中
屬數值的行和列分別加在一起,就可求出畫素為1的總數。
要求數值為「0」的畫素數(設變數「numval_0」)可以這樣:
numval_0 = length(find(bw==0));
其中「find(bw==0)」輸出所有bw為0的畫素序號,「length」函式求序號的長度,也就是所求的數值為「0」的畫素個數;
比例:numval_1/(numval_1+numval_0)
或者:numval_1/(size(bw,1)*size(bw,2))
其中「size(bw,1)」求bw中的行數,「size(bw,2)」求bw中的列數。
2樓:匿名使用者
假設你的影象是x,那麼1值的總數就是sum(sum(x)),所佔比例就是sum(sum(x))/(length(x(:,1))*length(x(1,:)))
如何用matlab計算二值化圖中白色區域的畫素點個數
3樓:一個青年
計算原理如下:
假設一副二值**,其背景是黑色的,而邊緣是白色的,而且白色邊緣中不包含黑色的點,就如附件中的那個影象。
程式原始碼如下:
%% step 1
clear all
clci=imread('test.bmp');%讀入**
bwi=im2bw(i,0.5);%轉化為二值影象
l=bwlabel(bwi,4);%將四連通區域進行標記
[r,c]=find(l==1);%查詢其中的白色區域,r是白點的所在行組成的向量,c是白點所在的列組成的向量
%% step 2 %去除r中重複的數
new_r=;
for i=1:length(r)
nn=find(new_r==r(i));
if isempty(nn),new_r=[new_r r(i)];end
end%% step 3
sum_zeros=0;%輪廓中總的點的個數
for i=1:length(new_r)
n=find(bwi(new_r(i),:)==1);%查詢有白點的行中白點所在的位置
if length(n)==1,continue;end%如果該行中只有一個白點,則返回
num_zeros=n(end)-n(1)+1-length(n);%否則計算夾在白點之間的黑點的個數
sum_zeros=sum_zeros+num_zeros;
end二值化圖例項如下(即黑白兩色):
擴充套件資料:
c語言實現原始碼:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
#include
#include
#include "cv.h"
#include "highgui.h"
#include
#include
#include
#include
using namespace std;
using namespace cv;
//統計一幅**中白色畫素點和黑色畫素點佔整幅圖的比例
int bsums(mat src)
else
}double bilib = counter * 1.0 / n * 1.0 * 100 * 1.0;
double bilih = black * 1.0 / n * 1.0 * 100 * 1.0;
cout << "counter:" << counter << endl;
cout << "black:" << black << endl;
cout << "n:" << n << endl;
cout << "bilib:" << bilib << endl;
cout << "bilih:" << bilih << endl;
return counter;
}int main(int agrc, char** agrv)
4樓:shine戚七七
下面是一個簡單的計算輪廓包含起來的畫素點的個數的程式:
%% step 1
clear all
clci=imread('test.bmp');%讀入**
bwi=im2bw(i,0.5);%轉化為二值影象
l=bwlabel(bwi,4);%將四連通區域進行標記
[r,c]=find(l==1);%查詢其中的白色區域,r是白點的所在行組成的向量,c是白點所在的列組成的向量
%% step 2 %去除r中重複的數
new_r=;
for i=1:length(r)
nn=find(new_r==r(i));
if isempty(nn),new_r=[new_r r(i)];end
end%% step 3
sum_zeros=0;%輪廓中總的點的個數
for i=1:length(new_r)
n=find(bwi(new_r(i),:)==1);%查詢有白點的行中白點所在的位置
if length(n)==1,continue;end%如果該行中只有一個白點,則返回
num_zeros=n(end)-n(1)+1-length(n);%否則計算夾在白點之間的黑點的個數
sum_zeros=sum_zeros+num_zeros;
end就是這樣的,比如這一行是這樣的001110000011100,那麼step3中的n就是一個向量:3 4 5 11 12 13,這六個數分別是這行中白點的位置,那麼其中的夾在1之間的0的個數就是:13-3+1-6=5 。
5樓:匿名使用者
matlab 怎麼讓二值影象中0變成1,1變成0
6樓:匿名使用者
很簡單,matlab專門提供了一種取反操作,就是符號「~」,就是數字鍵1左邊的那個鍵的上檔鍵,
比如a=[1,1,1;0,0,0];
那麼b=~a的結果就是b=[0,0,0;1,1,1];
如果是二值影象,也這樣做就行了。
7樓:阿亮臉色煞白
matlab專門提供了一種取反操作,就是符號「~」。
比如a=[1,1,1;0,0,0];
那麼b=~a的結果就是b=[0,0,0;1,1,1];
如果是二值影象,也這樣做就行了。
8樓:匿名使用者
用全1的矩陣減去a,求絕對值就ok
matlab程式設計。我有一幅二值影象,我想將影象中間那個白色部分用匡匡起來怎麼做
車牌識別?步驟如下 可以用消除小面積元素的辦法獲得你要的感興趣區域,函式格式 bw2 bwareaopen bw,p,conn 作用 刪除二值影象bw中面積小於p的物件 試幾次就知道你的p該選什麼值了,認情況下conn使用8鄰域。這樣作了之後應該就只剩下感興趣區域的畫素和背景畫素了。然後用投影法,即...
怎麼用matlab畫二元函式圖,怎麼用matlab 畫二元函式影象
式子中的想抄想x 1 x 2 表示的是數襲組中的元素,bai不是自變數啊?自變數本身應該 du是數zhi組 程式 x1 10 0.1 10 x1,x2是自變數,定義域是dao自己設的,可以改的 x2 10 0.1 10 fun 20.x1.x2 1.666584.x1 2000 函式 plot3 x...
怎麼在matlab裡生成8階均勻分佈的隨機矩陣
最簡單的答案 a rand 8 a 0.8147 0.9575 0.4218 0.6787 0.2769 0.4387 0.7094 0.9597 0.9058 0.9649 0.9157 0.7577 0.0462 0.3816 0.7547 0.3404 0.1270 0.1576 0.7922...