
运行效果:
测试图像:
颜色,文理形状特征比较后的结果,从最相似的往下排,第一个与测试图像最相似:
纹理特征提取程序:
function T =coocurrence(Image)
Color= imread(Image);
Gray=rgb2gray(Color);
[M,N] = size(Gray);
%为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级
for i = 1:M
for j = 1:N
for n = 1:256/16
if (n-1)16<=Gray(i,j)&Gray(i,j)<=(n-1)16+15
Gray(i,j) = n-1;
end
end
end
end
%计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
P = zeros(16,16,4);
for m = 1:16
for n = 1:16
for i = 1:M
for j = 1:N
if j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1
P(m,n,1) = P(m,n,1)+1;
P(n,m,1) = P(m,n,1);
end
if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1
P(m,n,2) = P(m,n,2)+1;
P(n,m,2) = P(m,n,2);
end
if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1
P(m,n,3) = P(m,n,3)+1;
P(n,m,3) = P(m,n,3);
end
if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1
P(m,n,4) = P(m,n,4)+1;
P(n,m,4) = P(m,n,4);
end
end
end
if m==n
P(m,n,:) = P(m,n,:)2;
end
end
end
% 对共生矩阵归一化
for n = 1:4
P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));
end
%对共生矩阵计算能量、熵、惯性矩、相关性4个纹理参数
H = zeros(1,4);
I = H;
Ux = H; Uy = H;
deltaX= H; deltaY = H;
C =H;
for n = 1:4
E(n) = sum(sum(P(:,:,n)^2)); %%能量
for i = 1:16
for j = 1:16
if P(i,j,n)~=0
H(n) = -P(i,j,n)log(P(i,j,n))+H(n); %%熵
end
I(n) = (i-j)^2P(i,j,n)+I(n); %%惯性矩
Ux(n) = iP(i,j,n)+Ux(n); %相关性中μx
Uy(n) = jP(i,j,n)+Uy(n); %相关性中μy
end
end
end
for n = 1:4
for i = 1:16
for j = 1:16
deltaX(n) = (i-Ux(n))^2P(i,j,n)+deltaX(n); %相关性中σx
deltaY(n) = (j-Uy(n))^2P(i,j,n)+deltaY(n); %相关性中σy
C(n) = ijP(i,j,n)+C(n);
end
end
C(n) = (C(n)-Ux(n)Uy(n))/deltaX(n)/deltaY(n); %相关性
end
%求能量、熵、惯性矩、相关性的均值和标准差作为最终8维纹理特征
a1 = mean(E) ;
b1 = sqrt(cov(E));
a2 = mean(H) ;
b2 = sqrt(cov(H));
a3 = mean(I);
b3 = sqrt(cov(I));
a4 = mean(C);
b4 = sqrt(cov(C));
T=[a1,a2,a3,a4,b1,b2,b3,b4];
T=T/sum(T);
图像匹配检索程序:
function [Sorted, ISorted,nResults,files]=searchImage(imageName, modelName)
% 找到最相近的图像
[Sorted, ISorted] = sort(Similarity);
Sorted=Sorted/sum(Sorted);
switch similaritymesure>Sorted(Nfiles)
case 1
nResults=Nfiles;
msgbox(['调节相似度过大,请重新定值,最大值为' num2str(Sorted(Nfiles))]);
case 0
for i=1:Nfiles
if Sorted(i)>=similaritymesure
nResults=i;
break;
end
end
end
X=0; %清空X
map=0;
[X,map]=imread('lena256x256x8bmp'); %读取图像
p=imfinfo('lena256x256x8bmp'); %读取图像的属性
s=2^pBitDepth-1; %计算图像的最大深度,如8位图像为255
%-------------------------------------------------------------------------
%简化的图像增强算法:简化Pmn及T变换的算法为:
Y=0; %清空Y
A=0;%清空A
Y=double(X)/s; %计算P(m,n),相当于求G(x)
%模糊变换算法
for m=1:pHeight
for n=1:pWidth
if(Y(m,n)<05)
A(m,n)=2Y(m,n)^2;
else
A(m,n)=1-2(1-Y(m,n))^2;
end
end
end
B=0; %清空B
B=uint8(A(2^pBitDepth-1)); %相当于求逆G-1(x')
%%%区域减影增强算法
P=0; %清空P
d=000005;%%%%设定冗余度
k=2;%%%%设定修正参数
for m=1:pHeight
for n=1:pWidth
if(Y(m,n)-A(m,n)>d)
P(m,n)=Y(m,n)+k(Y(m,n)-A(m,n));
end
if(Y(m,n)-A(m,n)<(-d))
P(m,n)=Y(m,n)+(-k)(Y(m,n)-A(m,n));
else
P(m,n)=Y(m,n);
end
end
end
B=0; %清空B
B=uint8(P(2^pBitDepth-1)); %相当于求逆G-1(x')
%%%图像增强几种方法效果对比
I=imread('lena256x256x8bmp'); %读入图像
I=double(I); %变成双精度
K1=filter2(fspecial('average',5),I)/255; %进行滤波
K2=imsubtract(I,K1);
K2=immultiply(K2,05);
K3=imadd(I,K2);
K2=uint8(K2); %转成8位数据
K3=uint8(K3);
I=uint8(I);
figure
title('图像增强几种方法效果对比');
subplot(2,2,1);imshow(I);title('原始图像');
subplot(2,2,2);imshow(K1);title('低通滤波图像');
subplot(2,2,3);imshow(K3);title('线性反锐化掩膜图像');
subplot(2,2,4);imshow(B);title('区域减影增强图像');
窗函数设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2fp/fs;
wc=2fc/fs;
N=ceil((as-795)/(1436(wc-wp)/2))+1;
beta=01102(as-87);
window=Kaiser(N+1,beta);
b=fir1(N,wc,window);
freqz(b,1,512,fs);
结果:
高通滤波器:
fs=22000;
Wp=25000/fs;
Ws=24800/fs;
Ap=1;
As=100;
N=ceil(8pi/(Wp-Ws))+1;
N=N+mod(N+1,2)+1;
Wc=(Wp+Ws)/2/pi;
h=fir1(N,Wc,'high');
omega=linspace(0,pi,512);
freqz(h,1,omega);
结果:
带通滤波器:
fs=22000;
Wp1=21200/fs;
Wp2=23000/fs;
Wc1=21000/fs;
Wc2=23200/fs;
Ap=1;
As=100;
W1=(Wp1+Wc1)/2;
W2=(Wp2+Wc2)/2;
wdth=min((Wp1-Wc1),(Wc2-Wp2));
N=ceil(11pi/wdth)+1;
b = fir1(N,[W1 W2]);
freqz(b,1,512,fs)
结果:
双线性法设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2fp/fs;
wc=2fc/fs; %归一化截止频率
[n,wn]=ellipord(wp,wc,ap,as);%求数字滤波器的最小阶数和归一化截止频率
[b,a]=ellip(n,ap,as,wn);%求传递函数的分子分母系数
freqz(b,a,512,fs);
结果:
滤波:
d=filter(b,a,y);
B=imresize(A,scale)\x0d\B=imresize(A,[mrowsncols])\x0d\\x0d\B就是图像A的拉伸或压缩结果\x0d\如果第二个输入参数是1个标量值scale,图像将保持纵横比\x0d\那么当0<scale1,B是A的放大结果\x0d\\x0d\如果第二个输入参量是一个想二元向量\x0d\那么说出的B的像素大小由[mrowsncols]决定,图像不一定保持纵横比
close all;clear;clc;
%读取并显示原图
image_rgb=imread('woman1jpg');
image_ycbcr=rgb2ycbcr(image_rgb); %将RGB色彩值变换为YcbCr色彩空间(将RGB真彩色图像转化为YcbCr色彩空间中相等的图像)
y=image_ycbcr(:,:,1); %这三行分别是Ycbcr空间的y,cb,cr对应矩阵
cr=image_ycbcr(:,:,2);
cb=image_ycbcr(:,:,3);
[W,H]=size(y); % y对应矩阵大小
image_face=zeros(W,H); %创建和原图等大的矩阵用来存放接下来二值化人脸数据
%以下循环是根据设定的阈值把人脸转换成二值图像
for x1=1:W; %%%%%%%%(cb=( 100,140),cr=(70,160)这是阈值,这个阈值应该是人脸肤色的范围
for y1=1:H;
if (cb(x1,y1)>=70)&&(cb(x1,y1)<=140)&&(cr(x1,y1)>=80)&&(cr(x1,y1)<=170)
image_face(x1,y1)=0;
else
image_face(x1,y1)=255;
end
end
end
figure(1),imshow(image_face) %显示初步转换成二值图像的人脸
%%%%%%%%% 找到人脸区域并设为白色%%%% (r=35)
se1=strel('square',35); %这个函数可以创建边长35的方形元素
fo=imclose(image_face,se1); %利用上面创建的方形元素,弥补figure(1)中人脸中以及其他部分残留的小块黑色
figure(2),imshow(fo) %显示修补漏洞后的人脸
log=logical(fo); %生成一个逻辑索引矩阵,为非零元素时返回1,否则返回0。用于把figure(2)中黑色部分记录为0,这样对非人脸部分做修改也不会影响人脸
r=image_rgb(:,:,1); %这个是rgb空间三维的数据
g=image_rgb(:,:,2);
b=image_rgb(:,:,3);
r(log==0)=255; %根据前面的逻辑数据把之前的黑色部分对应位置设为255,以后显示RGB图时,非人脸部分就是白色啦
g(log==0)=255;
b(log==0)=255;
face_rgb=cat(3,r,g,b); %把修改后的RGB矩阵重组
figure(3),imshow(face_rgb),title('face_rgb'); % 显示非人脸部分已经转白的RGB图
afm = rgb2gray(face_rgb); % rgb图转灰度图
figure(4), imshow(afm), title('surface image') % 显示人脸灰度图
这个是我个人加的注释 不知道你能不能理解 不能理解可以追问 我们一起学习下 哈哈 我也是新手
I=imread('D:\我的文档\MATLAB\cameramanbmp');
J0=imnoise(I,'gaussian');
J1=imnoise(I,'salt & pepper');
J0J3=imfilter(J0,fspecial('average'));
J0J5=imfilter(J0,fspecial('average',[5 5]));
J0Z3=medfilt2(J0);
J0Z5=medfilt2(J0,[5 5]);
J1J3=imfilter(J1,fspecial('average'));
J1J5=imfilter(J1,fspecial('average',[5 5]));
J1Z3=medfilt2(J1);
J1Z5=medfilt2(J1,[5 5]);
subplot(2,2,1),imshow(I);
title('原始图像');
subplot(2,2,2),imshow(J0);
title('加入零均值高斯噪声');
subplot(2,2,3),imshow(J1);
title('加入椒盐噪声');
figure,
subplot(2,2,1),imshow(J0J3);
title('对高斯噪声,采用3x3均值滤波');
subplot(2,2,2),imshow(J0J5);
title('对高斯噪声,采用5x5均值滤波');
subplot(2,2,3),imshow(J0Z3);
title('对高斯噪声,采用3x3中值滤波');
subplot(2,2,4),imshow(J0Z5);
title('对高斯噪声,采用5x5中值滤波');
figure,
subplot(2,2,1),imshow(J1J3);
title('对椒盐噪声,采用3x3均值滤波');
subplot(2,2,2),imshow(J1J5);
title('对椒盐噪声,采用5x5均值滤波');
subplot(2,2,3),imshow(J1Z3);
title('对椒盐噪声,采用3x3中值滤波');
subplot(2,2,4),imshow(J1Z5);
title('对椒盐噪声,采用5x5中值滤波');
以上就是关于图像处理颜色,纹理,形状matlab程序全部的内容,包括:图像处理颜色,纹理,形状matlab程序、求救!帮忙看一段MATLAB图像处理的程序、MATLAB数字图像处理程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)