资源简介
利用混合高斯模型对背景图像进行多高斯分布学习,根据背景学习结果,利用贝叶斯理论对含有目标的图像进行分割。
代码片段和文件信息
clc;clear;close all;
%逐幅打开图像列表中的图像,并计算其特征
[filenamefilepathfilterindex] = uigetfile(...
{‘*.txt‘‘All Image Files(*.txt)‘;
‘*.mat‘‘mat-files(*.mat)‘;...
‘*.*‘‘All Image Files(*.*)‘}...
‘文件名列表‘‘untitled.mat‘...
‘multiselect‘‘off‘);
if isequal(filename0)||isequal(filepath0)
return;
else
filefullpath = fullfile(filepathfilename);
end
fid = fopen(filefullpath‘r‘);
ffnum = fscanf(fid‘%d‘);
fwnum = ffnum(1);
fonum = ffnum(2);
fprintf(1‘\nwaterNum=%d otherNum=%d\n‘fwnumfonum);
fnum = fwnum + fonum;
fpath = fgetl(fid);
fprintf(1‘\n%s\n‘fpath);
nxyA = zeros(fwnum1);
cmA = zeros(33fwnum);
mvA = zeros(3fwnum);
pixelnum = 0;
% learn_zoom = 1/5;
% test_zoom = 1/5;
%B6 pics
% learn_zoom = 1/10;
% test_zoom = 1/10;
learn_zoom_size = 100;
test_zoom_size = 200;
for k = 1:fwnum
fName = fgetl(fid);
ffName = fullfile(fpathfName);
fprintf(1‘\n%s\n‘ffName);
img = imread(ffName); %读取图像
[imximyimd] = size(img);
max_xy = max(imximy);
if max_xy>learn_zoom_size
learn_zoom = learn_zoom_size/max_xy;
img = zoomImg(imglearn_zoom);
end
simg = double(img); %转换数据格式
Rd = simg(::1);
Gd = simg(::2);
Bd = simg(::3);
[nx ny] = size(Rd); %图像的行、列数
nxy = nx * ny; %图像的总象素数
fprintf(1‘\n第%d测试图像的行数:%d 列数:%d 像素数:%d\n‘knxnynxy);
% subplot(221); imshow(img);title(‘background RGB‘);
nxyA(k) = nxy;
nxA(k) = nx;
nyA(k) = ny;
pixels = reshape(simgnxy3);
pixelsA(pixelnum+1:pixelnum+nxy:) = pixels;
pixelnum = pixelnum+nxy;
end
figure(1);
subplot(221);imshow(img);title(‘background‘);grid on;
x = pixelsA;
nbVar = size(x2);
nn = 1000;
c = 1;
pixelsI = pixelsA(1:nn:);
Mu(1:) = sum(pixelsI)/nn;
Sigma(::1) = cov([pixelsI‘ pixelsI‘]‘);
Priors(1) = 1;
% [Data_id Priors Mu Sigma] = EM_init_FCM(pixelsI c);
% [Priors Mu Sigma] = EM(pixelsI Priors Mu Sigma);
t = zeros(pixelnum1);
t(1:nn) = 1;
beta = 1;
lamda = 3;
for j=1:pixelnum
for k=1:c
covt = reshape(Sigma(::k)nbVarnbVar);
incov = inv(covt);
dcov = det(covt);
logd = log(abs(dcov));
logp = log(Priors(k));
T(k) = beta*nbVar*lamda^2-2*logp+logd;
a = x(j:)-Mu(k:);
tt = a*incov*a‘-2*logp+logd;
if tt>T(k)
t_3std(jk) = -1;
N_ab(jk) = -10^10;
else
t_3std(jk) = 1;
N_ab(jk) = -(0.5)*a*incov*a‘+logp+(-0.5)*logd;%后验概率值
end
end
%判断第j个样本是哪一类:新的类别或已知类别中的一类
[ir ic] = find(t_3std(j:)==1);
lnstd = length(ir);
%若在所有类别的3sigma之外,则为新的类别;若在3sigma之内,则判定为后验概率最大的那一类
if lnstd==0
c = c+1;
t(j) = c;
if j t(j+1:j+10) = c;
end
else
N_ab_max = max(
相关资源
- 基于MATLAB的车牌图像分割技术
- mo_2_3.m3. 图像分割matlab实现源代码
- Matlab分水岭法分割图像代码
- 彩色图像的分割。算法主要是利用聚
- 标记分水岭分割算法的matlab实现
- FLICM图像分割算法
- 图像模糊C均值聚类分割matlab代码
- 图像处理/图像分割实验/(自动)阈值
- 基于均值漂移mean shift算法的图像分割
- 基于水平集CV模型的图像分割Matlab代码
- 小波模极大值边缘检测+膨胀+边缘跟踪
- 指针式仪表识别方法,确定指针式仪
- 把图像分割成RGB通道的MATLAB代码
- 图像分割算法研究与实现
- 基于贝叶斯算法的图像像素分割
- 基于标记的分水岭算法matlab程序
- MATLAB图像分割提取算法源代码---车牌
- 采用基于区域的种子区域生长方法(
- 水平集图像分割的Matlab程序代码
- MRF图像分割步骤与MATLAB程序
- 一个matlab的K均值聚类分割程序
- 基于各类算子对图像进行分割
- Meanshift图像分割matlab
- 基于MATLAB的图像分割含GUI界面
- 完整的CV模型代码cvdemo
- Prewitt分割实现
- 模糊C均值聚类图像分割算法的matlab实
- 图像分割算法
- 基于HSI空间的图像分割算法
- pcnn脉冲耦合神经网络的图像分割
评论
共有 条评论