%freeman 分解 clc clear all close all %load E:\SanFrancisco\ load('T'); row =900; col =1024; for i=1:row for j=1:col t= [T(i,j,1) T(i,j,2) T(i,j,3);T(i,j,4) T(i,j,5) T(i,j,6); T(i,j,7) T(i,j,8) T(i,j,9)]; fv=(3/2)*t(2,2); pv=(8/3)*fv; %求 pv if real(t(1,3))>0 alph=-1; beta=1+(t(1,1)-t(3,3))/(t(1,3)+t(3,3)-2*t(2,2)); be=(t(1,1)+t(1,3)-2*t(2,2))/(t(1,3)+t(3,3)-2*t(2,2)); %% 求 ps和 pd % fs=(t(1,1)-t(3,3))/((abs(beta))^2-1); 不好 fs=(t(1,3)+t(3,3)-2*t(2,2))/(1+beta); ps=fs*(1+(abs(beta))^2); fd=t(3,3)-fs-fv; =2*fd; else beta=1; alph=(t(3,3)-t(1,1))/(t(3,3)-t(1,3)-t(2,2))-1; % fd=(t(3,3)-t(1,1))/(1-(abs(alph))^2); 不好 fd=(t(3,3)-t(1,3)-t(2,2))/(1-alph); fs=t(3,3)-fd-fv; pd=fd*(1+(abs(alph))^2); ps=2*fs; end %% 得到 Pv、 Ps、 Pd 三个分量 Pv(i,j)=pv; Ps(i,j)=ps; Pd(i,j)=pd; end end freem(:,:,1)=Pd; freem(:,:,2)=Pv; freem(:,:,3)=Ps figure;imshow(Pv);title('Pv'); ure;imshow(Pd);title('Pd'); figure;imshow(Ps);title('Ps'); figure;imshow(freem);title('freeman-position'); % 混色后的 RGB 图像
Freeman—Durden分解的MATLAB程序 来自淘豆网m.daumloan.com转载请标明出处.