matlab 計算灰度影象的一階矩,二階矩,三階矩例項
阿新 • • 發佈:2020-04-22
一階矩,定義了每個顏色分量的平均強度
二階矩,反映待測區域顏色方差,即不均勻性
三階矩,定義了顏色分量的偏斜度,即顏色的不對稱性
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表示按行劃分
補充知識:影象的重心和二階矩
影象的重心
影象實際上就是個矩陣,每個位置的元素就是該處的畫素。 這裡碰到了求影象重心的問題,特此總結:
計算公式:
其中(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+'); %十字標出重心位置
影象的二階矩
我們這裡只討論二階矩的問題。
二階矩最終是形成了一個二階矩陣,如下:
計算方法:
其中(r0,c0)是重心座標。
以上這篇matlab 計算灰度影象的一階矩,三階矩例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。