图像分离

转载 2018年04月16日 20:21:27
I1=imread ('input1.jpg');          
I2=imread ('input2.jpg'); 
I3=imread ('input3.jpg'); 
I1=rgb2gray(I1);
I2=rgb2gray(I2);
I3=rgb2gray(I3);
subplot(4,3,1),imshow(I1),title('输入图像1'), 
subplot(4,3,2),imshow(I2),title('输入图像2'), 
subplot(4,3,3),imshow(I3),title('输入图像3'), 
 
% 计算图片数据的维数 
[x1,y1,z1]=size(I1); 
[x2,y2,z2]=size(I2); 
[x3,y3,z3]=size(I3); 
 
% 将其重新排列为一维行向量并组成矩阵 
s1=[reshape(I1,[1,x1*y1*z1])]; 
s2=[reshape(I2,[1,x2*y2*z2])]; 
s3=[reshape(I3,[1,x3*y3*z3])]; 
S_all=[s1;s2;s3];   % 图片个数即为变量数,图片的像素数即为采样数 
                              % 因此S_all是一个变量个数*采样个数的矩阵 
S=double(S_all);      % 将图像数据转换为双精度格式 ,图片处理前要将数据格式用double转化为双精度格式(以保证计算精度)
Sweight=rand(size(S_all,1));     % 取一随机矩阵,作为信号混合的权矩阵 ,注意size(S_all,1)产生三个数
MixedS=Sweight*S;           % 得到三个图像的混合信号矩阵 
 
% 将混合矩阵重新排列为原始的图片矩阵并输出 
ms1=reshape(MixedS(1,:),[x1,y1,z1]); 
ms2=reshape(MixedS(2,:),[x2,y2,z2]); 
ms3=reshape(MixedS(3,:),[x3,y3,z3]); 
 
I1_mixed=uint8(round(ms1)); %显示图像前用uint8转换数据格式
I2_mixed=uint8(round(ms2)); 
I3_mixed=uint8(round(ms3)); 
 
subplot(4,3,4),imshow(I1_mixed),title('混合图像1'), 
subplot(4,3,5),imshow(I2_mixed),title('混合图像2'), 
subplot(4,3,6),imshow(I3_mixed),title('混合图像3'), 
 
MixedS_bak=MixedS;      % 将混合后的数据备份,以便在恢复时直接调用 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%  标准化  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
MixedS_mean=zeros(3,1); 
for i=1:3 
    MixedS_mean(i)=mean(MixedS(i,:)); 
end                                         % 计算MixedS的均值与方差 


for i=1:3 
    for j=1:size(MixedS,2) 
        MixedS(i,j)=MixedS(i,j)-MixedS_mean(i); 
    end 
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%  白化  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
MixedS_cov=cov(MixedS');                    % cov为求协方差的函数 
[E,D]=eig(MixedS_cov);                     % 对图片矩阵的协方差函数进行特征值分解 
Q=inv(sqrt(D))*(E)';                        % Q为白化矩阵 
MixedS_white=Q*MixedS;                      % MixedS_white为白化后的图片矩阵 
IsI=cov(MixedS_white');                     % IsI应为单位阵             
 
%%%%%%%%%%%%%%%%%%%%%%%% FASTICA算法  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
X=MixedS_white;                             % 以下算法将对X进行操作 
[VariableNum,SampleNum]=size(X); 
numofIC=VariableNum;                        % 在此应用中,独立元个数等于变量个数 
B=zeros(numofIC,VariableNum);               % 初始化列向量b的寄存矩阵,B=[b1,b2,...,bd] 
for r=1:numofIC                             % 迭代求取每一个独立元 
    i=1;maxIterationsNum=150;               % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数) 
    b=2*(rand(numofIC,1)-.5);                   % 随机设置b初值 
    b=b/norm(b);                            % 对b标准化 
    while i=maxIterationsNum+1 
        if i == maxIterationsNum           % 循环结束处理 
            fprintf('\n第%d分量在%d次迭代内并不收敛。', r,maxIterationsNum); 
            break; 
        end 
        bOld=b;                            % 初始化前一步b的寄存器 
        u=1; 
        t=X'*b; 
        g=t.^3; 
        dg=3*t.^2; 
        b=((1-u)*t'*g*b+u*X*g)/SampleNum-mean(dg)*b;     
                                            % 核心公式,参见理论部分公式2.52 
        b=b-B*B'*b;                         % 对b正交化 
        b=b/norm(b);  
        if abs(abs(b'*bOld)-1)<1e-9        % 如果收敛,则 
             B(:,r)=b;                     % 保存所得向量b 
             break; 
         end 
        i=i+1;         
    end 
end 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%  数据复原并构图  %%%%%%%%%%%%%%%%%%%%%%%%%% 
 
ICAedS=B'*Q*MixedS_bak;                     % 参见理论部分公式2.55 
ICAedS_bak=ICAedS; 
ICAedS=abs(55*ICAedS); 
 
% t1=ICAedS(1,:); 
% t2=ICAedS(2,:); 
% t3=ICAedS(3,:); 
%  
% for i=1:size(t1,2) 
%     t1(1,i)=t1(1,i)+abs(min(t1)); 
%     t1(1,i)=t1(1,i)*256/(max(t1)-min(t1)); 
%         t2(1,i)=t2(1,i)+abs(min(t2)); 
%     t2(1,i)=t2(1,i)*256/(max(t2)-min(t2)); 
%         t3(1,i)=t3(1,i)+abs(min(t3)); 
%     t3(1,i)=t3(1,i)*256/(max(t3)-min(t3)); 
%          
% end 
%  
% ICAedS(1,:)=t1; 
% ICAedS(2,:)=t2; 
% ICAedS(3,:)=t3; 
 
 
% 将计算后的混合矩阵重新排列为图片矩阵并输出 
is1=reshape(ICAedS(1,:),[x1,y1,z1]); 
is2=reshape(ICAedS(2,:),[x2,y2,z2]); 
is3=reshape(ICAedS(3,:),[x3,y3,z3]); 
 
I1_icaed =uint8 (round(is1)); 
I2_icaed =uint8 (round(is2)); 
I3_icaed =uint8 (round(is3)); 
 
subplot(4,3,7),imshow(I1_icaed),title('ICA解混图像1'), 
subplot(4,3,8),imshow(I2_icaed),title('ICA解混图像2'), 
subplot(4,3,9),imshow(I3_icaed),title('ICA解混图像3'), 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%  PCA计算并构图  %%%%%%%%%%%%%%%%%%%%%%%%%% 
[V,D]=eig(MixedS_cov); 
Vtmp=zeros(size(V,1),1); 
for j=1:2 
    for i=1:2 
        if D(i,i)<D(i+1,i+1) 
            tmp=D(i,i);Vtmp=V(:,i); 
            D(i,i)=D(i+1,i+1);V(:,i)=V(:,i+1); 
            D(i+1,i+1)=tmp;V(:,i+1)=Vtmp; 
        end 
    end 
end 
 
t1=(MixedS'*V(:,1))'; 
t2=(MixedS'*V(:,2))';    
t3=(MixedS'*V(:,3))'; 
 
for i=1:size(t1,2)                    % 亮度调整                        
    t1(1,i)=t1(1,i)+abs(min(t1)); 
    t1(1,i)=t1(1,i)*256/(max(t1)-min(t1)); 
    t2(1,i)=t2(1,i)+abs(min(t2)); 
    t2(1,i)=t2(1,i)*256/(max(t2)-min(t2)); 
    t3(1,i)=t3(1,i)+abs(min(t3)); 
    t3(1,i)=t3(1,i)*256/(max(t3)-min(t3)); 
end 
%%%%%%%%%%%%%%%%%%%%%%%   构图    %%%%%%%%%%%%%%%%%%%%%% 
ts1=reshape(t1,[x1,y1,z1]); 
ts2=reshape(t2,[x2,y2,z2]); 
ts3=reshape(t3,[x3,y3,z3]); 
 
T1_icaed =uint8 (round(ts1)); 
T2_icaed =uint8 (round(ts2)); 
T3_icaed =uint8 (round(ts3)); 
 
subplot(4,3,10),imshow(T1_icaed),title('PCA解混图像1'), 
subplot(4,3,11),imshow(T2_icaed),title('PCA解混图像2'), 
subplot(4,3,12),imshow(T3_icaed),title('PCA解混图像3'), 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%  输出一维矢量图  %%%%%%%%%%%%%%%%%%%%%%%%%% 
% subplot(3,3,1),plot(S(1,:)),title('输入图像1一维矢量图') 
% subplot(3,3,2),plot(S(2,:)),title('输入图像2一维矢量图') 
% subplot(3,3,3),plot(S(3,:)),title('输入图像3一维矢量图') 
% subplot(3,3,4),plot(ICAedS(1,:)),title('ICA解混图像1一维矢量图') 
% subplot(3,3,5),plot(ICAedS(2,:)),title('ICA解混图像2一维矢量图') 
% subplot(3,3,6),plot(ICAedS(3,:)),title('ICA解混图像3一维矢量图') 
% subplot(3,3,7),plot(t1),title('PCA解混图像1一维矢量图') 
% subplot(3,3,8),plot(t2),title('PCA解混图像2一维矢量图') 
% subplot(3,3,9),plot(t3),title('PCA解混图像3一维矢量图') 




im = imread(imgname);
im=rgb2gray(im);
imnoise_1=imnoise(im,'speckle',1);
imnoise_1=uint8(imnoise_1);
g2=size(imnoise_1);
figure(2)imshow(imnoise_1);
title('Noise image');
imnoise_2=double(imnoise_1);
imnoise_3=imnoise_2+var;
imnoise_3=log(imnoise_3);
immoise_3=double(imnoise_3);
imnoise_4=exp(imnoise_3);
imnoise_4=imnoise_4-var;
imnoise_5=uint8(imnoise_4);
figure(5)imshow(imnoise_5)title('recovery speckle image');


end

Tensorflow-图像处理视频课程

课程以Tensorflow作为核心武器,基于图像处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。
  • 2018年04月01日 10:00

OpenCV学习笔记(07):图像通道的分离和混合

1.通道分离函数splitOpenCV提供split函数将多通道的矩阵分离成单通道矩阵,原型如下: void cv::split (const Mat & src, Mat * mvbegin )...
  • CV_Jason
  • CV_Jason
  • 2017-02-14 15:09:03
  • 1135

基于matlab图像分离

这是我学习matlab之后的第一件作品;对二值图像进行分离。         实现代码: clear all;  clc; A=imread('F:\study\canbi\zp014.jpg'...
  • kuangsingle
  • kuangsingle
  • 2012-06-04 11:29:36
  • 137

ica 图像盲分离算法

  • 2015年04月22日 12:23
  • 2KB
  • 下载

图像的盲分离matlab

  • 2012年06月30日 20:48
  • 471KB
  • 下载

图像背景和前景的分离提取

  • 2011年12月28日 11:55
  • 966KB
  • 下载

将图像分离成HSV空间

将图像分离成HSV空间,并显示HSV空间的每个通道。 Rect select; vector mv; capture >> frame; cvtColo...
  • duan19920101
  • duan19920101
  • 2016-01-25 09:20:31
  • 624

图像处理——目标检测与前背景分离

目标检测 前背景分离 光流法
  • u010402786
  • u010402786
  • 2016-01-27 19:58:23
  • 12304

3D Camera-双目相机图像分离实现

采用双目摄像头时,采集出的图像是双拼图,为了只用其中一幅图像,实现源码如下: //相机图像分离源码 //双目相机图像2560*960 //单个相机图像1280*960 cv::M...
  • sunboyiris
  • sunboyiris
  • 2017-09-05 14:30:52
  • 520

将一副图像的RGB三通道分离显示

  • 2014年12月24日 20:17
  • 1KB
  • 下载
收藏助手
不良信息举报
您举报文章:图像分离
举报原因:
原因补充:

(最多只允许输入30个字)