clear;
clc;
Xinxi=imfinfo('ostuV.bmp');%%%%%%获取图像的信息%%%%%%%%%%%%%
[imagedata,map]=imread('ostuV.bmp');
%%%判断图像是什么类型%%%%%%%%%
if strcmp('truecolor',Xinxi.ColorType)==1 %%%图像是真彩色
imagedata=im2uint8(rgb2gray(imagedata));
elseif strcmp('indexed',Xinxi.ColorType)==1
imagedata=im2uint8(ind2gray(imagedata,map));%%图像是索引
end
%%%%%%%%%%%%%初始参数设置%%%%%%%%%%%%
ori_m=imagedata;
ori=double(ori_m);
zita=10/sqrt(3);
%h_size=11;
h_size=2*ceil(3*zita-1)+1;%%%%高斯模板大小
h_N1=(h_size-1)/2;%%%%高斯模板取值数
[height width]=size(ori);%%%%%%图像行列数
image_1=zeros(height,width);
yuzhi1=70;%%%%%%%增加阈值判断条件,因为要处理的是白光条区域,前面黑色区域可以设定阈值跳过,从而提高速度。
ftt_max2=-1;%%%%%%%%%%%%%%二阶导数最大值阈值
k=1;
kk=1;
%%%%%%%%%提取中心点%%%%%%%%%%%%%%%%%%%%%%%
for i=h_N1+1:height-h_N1
for j=h_N1+1:width-h_N1
if (ori(i,j)>yuzhi1)%%%%%%%%%%%%白光条阈值判断%%%%%%%%%%%%%
ori_1=[ori(i-h_N1:1:i+h_N1,j-h_N1:1:j+h_N1)]; %%%%%%%%截取原图像中的19*19的图像数据
gx=sum(sum(ori_1.*hx(zita,h_N1)));%%%%%%%%%%%%%求这一点的一阶x偏导
gy=sum(sum(ori_1.*hy(zita,h_N1)));%%%%%%%%%%%%%%%%一阶y偏导
gxx=sum(sum(ori_1.*hxx(zita,h_N1)));%%%%%%%%%%%%%%二阶XX偏导
gyy=sum(sum(ori_1.*hyy(zita,h_N1)));%%%%%%%%%%%%%%%二阶YY偏导
gxy=sum(sum(ori_1.*hxy(zita,h_N1))); %%%%%%%%%%%%%%二阶XY偏导
%%%%%%%%%%%%%%%%%%%%%Hessian矩阵求取%%%%%%%%%%%%%
H=[gxx,gxy;gxy,gyy];
[V,D]=eig(H);%%%%%%%%%%%特征值和特征向量求取
%%%%%%%%%%%%%%%求取二阶方向导数的极小值%%%%%%%%%%%%%%%%%%%%%%%%%
if abs(D(1,1))>=abs(D(2,2)) %%%%%%%%%%通过判断绝对最大特征值对应的特征向量
nx_ny=V(:,1);
fttmax=D(1,1);
else
nx_ny=V(:,2);
fttmax=D(2,2);
end
m(k)=fttmax;%%%%%%%%%记录二阶极值,以此来设定二阶方向导数阈值%%%%%%
k=k+1;
nx=nx_ny(1,1);
ny=nx_ny(2,1);
t=-(nx*gx+ny*gy)/(nx^2*gxx+2*nx*ny*gxy+ny^2*gyy);%%%%%%%%%%%%%%一阶方向导数过零点
%%%%%%%%%%%%%%%当t*nx和t*ny满足[-1/2 1/2]*[-1/2 1/2]时则说明一阶方向导数过零的像素在当前像素内,而又满足二阶方向导数取到极小值,则此像素为光条中心
if (abs(t*nx)<=0.5)&&(abs(t*ny)<=0.5)&&(fttmax<ftt_max2)
image_1(i,j)=255;
result1(kk)=i;%%%%%%%%%%用数组记录光条中心的像素的行数
result2(kk)=j;%%%%%%%%%%用数组记录光条中心的像素的列数
kk=kk+1;
end
end
end
end
%%%%%%%%%%%%%%将光条中心显示在原图像中%%%%%%%%%%%
for i=1:(kk-1)
imagedata(result1(i),result2(i))=0;
end
figure(1);
imshow(image_1);%%%%%%%%%%%显示提取的光条中心
imwrite(image_1,'image_2.bmp');
figure(2);
imshow(imagedata);%%%%%%%%%与原图像对比看是否是显示的原图像的光条中心
imwrite(imagedata,'image_3.bmp');
%%figure(3);
%%imshow(ori);
steger 核心算法,可以直接运行
5星 · 超过95%的资源 需积分: 49 198 浏览量
2017-11-30
15:17:10
上传
评论 24
收藏 208KB ZIP 举报
junqi999
- 粉丝: 1
- 资源: 4
- 1
- 2
前往页