1. 程式人生 > 程式設計 >matlab 計算灰度影象的一階矩,二階矩,三階矩例項

matlab 計算灰度影象的一階矩,二階矩,三階矩例項

一階矩,定義了每個顏色分量的平均強度

matlab 計算灰度影象的一階矩,二階矩,三階矩例項

二階矩,反映待測區域顏色方差,即不均勻性

matlab 計算灰度影象的一階矩,三階矩例項

三階矩,定義了顏色分量的偏斜度,即顏色的不對稱性

matlab 計算灰度影象的一階矩,三階矩例項

close all;clear all;clc;
J = imread('lena.jpg');
K = imadjust(J,[70/255 160/255],[]);
figure;
subplot(121),imshow(J);
subplot(122),imshow(K);
[m,n] = size(J);
mm = round(m/2);
mn = round(n/2);
[p,q] = size(K);
pp = round(p/2);
qq = round(q/2);
J = double(J);
K = double(K);
colorsum = 0.0;
Javg = mean2(J) %求原影象一階矩
Kavg = mean2(K) %求增強對比度後的影象一階矩
Jstd = std(std(J)) %求原影象的二階矩,因為一次std函式表示按列求標準差,兩次std表示求整個矩陣的標準差
Kstd = std(std(K)) %求增強對比度後的影象二階矩
for i=1:mm
 for j=1:mn
  colorsum = colorsum+(J(i,j)-Javg)^3;
 end
end
Jske = (colorsum/(mm*mn))^(1/3) %求原影象的三階矩
colorsum = 0.0;
for i=1:pp
 for j=1:qq
  colorsum = colorsum + (J(i,j)-Kavg)^3;
 end
end
Kske = (colorsum/(pp*qq))^(1/3) %求增強對比度後的影象三階矩

部分函式說明:

mean2(A) : 求矩陣A的均值

std(x,flag,dim): 求x的標準偏差

std(x,1) : 0表示求標準差時除n-1,1表示按列劃分

std(x,1,2) : 1表示求標準差時除n,2表示按行劃分

補充知識:影象的重心和二階矩

影象的重心

影象實際上就是個矩陣,每個位置的元素就是該處的畫素。 這裡碰到了求影象重心的問題,特此總結:

計算公式:

matlab 計算灰度影象的一階矩,三階矩例項

其中(xi,yi)是畫素點的座標,pi是該點的畫素值。

以下是利用matlab求影象重心

I = imread(‘1.jpg');
I = rgb2gray(I);
imshow(I);
I = double(I);
[rows,cols] = size(I);
x = ones(rows,1)*[1:cols];
y = [1:rows]'*ones(1,cols);
area = sum(sum(I));
meanx = sum(sum(I.*x))/area;
meany = sum(sum(I.*y))/area;
hold on;
plot(meanx,meany,'r+'); %十字標出重心位置

影象的二階矩

我們這裡只討論二階矩的問題。

二階矩最終是形成了一個二階矩陣,如下:

matlab 計算灰度影象的一階矩,三階矩例項

計算方法:

matlab 計算灰度影象的一階矩,三階矩例項

其中(r0,c0)是重心座標。

以上這篇matlab 計算灰度影象的一階矩,三階矩例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。