怎麼在MATLAB裡求出二值影象1值畫素和0值畫素個數

2021-04-13 01:49:03 字數 3720 閱讀 9467

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...