数字图像处理 matlab实现
文章目錄
- 1.MATLAB 相關問題
- MATLAB:運行出現 “ 未定義函數或變量 ”
- 2.圖像的采樣和量化
- 3.圖像的基本運算
- 線性點運算
- 圖像的縮放
- 圖像的旋轉
- 4.圖像變換
- 傅里葉變換
- 旋轉傅里葉變換
- 離散余弦變換
- 5.圖像增強
- 1.灰度線性變換
- 2.空間域平滑濾波器
- 3.空間域銳化濾波器
- 4.頻域率平滑濾波器(高斯低通濾波器)
- 6.圖像復原
- 1.基于均值濾波器的圖像復原
- 2.基于順序統計濾波器的圖像復原
- 3.基于帶阻濾波器的圖像復原
- 7. 圖像的壓縮編碼
- 1.游程編碼
- 2.基于離散余弦變換的圖像壓縮
- 8.圖像分割
- 邊緣檢測
- 圖像分割
- 9.彩色圖像分割
- 10.圖像 的表示和描述
1.MATLAB 相關問題
MATLAB:運行出現 “ 未定義函數或變量 ”
先檢查是不是拼寫錯誤,詳細可以看
MATLAB:運行出現 “ 未定義函數或變量 ”
2.圖像的采樣和量化
emmm看見b站一個像素頭像制作的視頻,評論有說用馬賽克,才意識到馬賽克就是圖像采樣,那就可以用matlab做,但是我發現上面的這代碼處理不了彩色的,會變成三個黑白的被采樣的圖像。具體為啥以后有興趣再看吧。
3.圖像的基本運算
線性點運算
clc close all clear all addpath E:\study\數字圖像處理\實驗\1\ lenagray.jpg I=imread('lenagray.jpg'); %讀取圖片 I=im2double(I); %轉換數據類型為doublefigure(1);subplot(2,2,1); imshow(I);title('實驗人:李詩雨','fontsize',7),xlabel('(a1) 原圖'); %顯示原圖像figure(1);subplot(2,2,2); a = 1.5;b = 50; %增加對比度 o = a .* I + b/255; imshow(o);title('實驗人:李詩雨','fontsize',7),xlabel('(a2) a=1.5,b=50,增加對比度'); %顯示圖像1figure(1);subplot(2,2,3); a = 0.3;b = 50; o = a .* I +b/255; imshow(o);title('實驗人:李詩雨','fontsize',7),xlabel('(a3) a=0.3,b=50,減小對比度'); %顯示圖像2figure(1);subplot(2,2,4); a = -1;b = 50; o = a .* I +b/255; imshow(mat2gray(o));title('實驗人:李詩雨','fontsize',7),xlabel('(a4) a=-1,b=50,反色'); %顯示圖像3圖像的縮放
clc close all clear all addpath E:\study\數字圖像處理\實驗\1\ lenagray.jpg I=imread('lenagray.jpg'); %讀取圖片 I=im2double(I); %轉換數據類型為double %對圖像比例放大1.5倍,比例縮小0.7倍,非比例放大到600x700像素,非比例縮小到300x400像素。 figure(1);subplot(2,3,1); imshow(I);title('實驗人:李詩雨','fontsize',7),xlabel('(b1) 原圖'); %顯示原圖像J1=imresize(I,1.5,'bilinear'); figure(1);subplot(2,3,2); imshow(J1);title('實驗人:李詩雨','fontsize',7),xlabel('(b2) 比例放大1.5倍'); %顯示原圖像J2=imresize(I,0.7,'bilinear'); figure(1);subplot(2,3,3); imshow(J2);title('實驗人:李詩雨','fontsize',7),xlabel('(b3) 比例縮小0.7倍'); %顯示原圖像J3=imresize(I,[600,700],'bilinear'); figure(1);subplot(2,3,4); imshow(J3);title('實驗人:李詩雨','fontsize',7),xlabel('(b4) 非比例放大到600x700像素 '); %顯示原圖像J4=imresize(I,[300,400],'bilinear'); figure(1);subplot(2,3,5); imshow(J4);title('實驗人:李詩雨','fontsize',7),xlabel('(b5) 非比例縮小到300x400像素'); %顯示原圖像圖像的旋轉
clc close all clear all addpath E:\study\數字圖像處理\實驗\1\ cameraman.tif I=imread('cameraman.tif'); %讀取圖片 I=im2double(I); %轉換數據類型為double %對圖像旋轉30度、60度、90度、135度和180度。 figure(1);subplot(2,3,1); imshow(I);title('實驗人:李詩雨','fontsize',7),xlabel('(c1) 原圖'); %顯示原圖像J1=imrotate(I,30,'bilinear'); figure(1);subplot(2,3,2); imshow(J1);title('實驗人:李詩雨','fontsize',7),xlabel('(c2) 旋轉 30度'); J2=imrotate(I,60,'bilinear'); figure(1);subplot(2,3,3); imshow(J2);title('實驗人:李詩雨','fontsize',7),xlabel('(c2) 旋轉 60度'); J3=imrotate(I,90,'bilinear'); figure(1);subplot(2,3,4); imshow(J3);title('實驗人:李詩雨','fontsize',7),xlabel('(c2) 旋轉 90度'); J4=imrotate(I,135,'bilinear'); figure(1);subplot(2,3,5); imshow(J4);title('實驗人:李詩雨','fontsize',7),xlabel('(c2) 旋轉 135度'); J5=imrotate(I,180,'bilinear'); figure(1);subplot(2,3,6); imshow(J5);title('實驗人:李詩雨','fontsize',7),xlabel('(c2) 旋轉 180度');4.圖像變換
傅里葉變換
- I=im2double(I);
- imshow(I3,[5,50])
旋轉傅里葉變換
利用Matlab生成給定的圖像,并對其進行旋轉30度、90度和120度,然后對他們分別進行傅里葉變換。
clc close all clear all %構造原始圖像 I = zeros(256,256); I(28:228,108:148) = 1; %旋轉圖像 I1=imrotate(I,30,'bilinear'); I2=imrotate(I,90,'bilinear'); I3=imrotate(I,120,'bilinear'); %傅里葉變換 If=fft2(I);F=abs(If);If=fftshift(F); I1f=fft2(I1);F=abs(I1f);I1f=fftshift(F); I2f=fft2(I2);F=abs(I2f);I2f=fftshift(F); I3f=fft2(I3);F=abs(I3f);I3f=fftshift(F); %顯示圖像 subplot(2,4,1);imshow(I);title('實驗人:李詩雨'),xlabel('(b)原圖 '); subplot(2,4,2);imshow(I1);title('實驗人:李詩雨'),xlabel('(b1)原圖 旋轉30度 '); subplot(2,4,3);imshow(I2);title('實驗人:李詩雨'),xlabel('(b2)原圖 旋轉90度'); subplot(2,4,4);imshow(I3);title('實驗人:李詩雨'),xlabel('(b3)原圖 旋轉120度');subplot(2,4,5);imshow(If,[5,50]);title('實驗人:李詩雨'),xlabel('(b)原圖像傅里葉頻譜 '); subplot(2,4,6);imshow(I1f,[5,50]);title('實驗人:李詩雨'),xlabel('(b1)原圖旋轉30度 傅里葉圖譜 '); subplot(2,4,7);imshow(I2f,[5,50]);title('實驗人:李詩雨'),xlabel('(b2)原圖旋轉90度 傅里葉圖譜 '); subplot(2,4,8);imshow(I3f,[5,50]);title('實驗人:李詩雨'),xlabel('(b3)原圖旋轉120度 傅里葉圖譜 ');
*I = zeros(256,256); I(60:196,60:196) = 1;
**置1,是白色,0,黑色,I(行第a個像素:到行第b個像素,列第c個像素:到列第d個像素)
更改這個之后:
離散余弦變換
用DCT變換對圖像進行圖像壓縮,求經壓縮、解壓后的圖像。
clc close all clear all addpath E:\study\數字圖像處理\實驗\4\ face.jpg I =imread('face.jpg'); [M,N]=size(I);%M=512,N=512 I=im2double(I); %生成標準DCT變化中的矩陣(8x8) n=8;[cc,rr]=meshgrid(0:n-1); C=sqrt(2/n)*cos(pi*(2*cc+1).*rr/(2*n)); C(1,:)=C(1,:)/sqrt(2);%光亮度量化表 a=[16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;18 22 37 56 68 109 103 77;24 35 55 64 81 104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99 ];%分塊做DCT變換(8x8) DCT變換公式 正變換Y=CIC' for i=1:8:Mfor j=1:8:NP=I(i:i+7,j:j+7);K=C*P*C';I1(i:i+7,j:j+7)=K;K=K./a; %量化(按位除)K(abs(K)<0.03)=0;I2(i:i+7,j:j+7)=K; end end%分塊做DCT反變換(8x8),逆變換 P=C'YC for i=1:8:Mfor j=1:8:NP=I2(i:i+7,j:j+7).*a;%反量化K=C'*P*C;I3(i:i+7,j:j+7)=K; end endsubplot(2,2,1);imshow(I);title('實驗人:李詩雨'),xlabel('(c1)原圖 '); subplot(2,2,2);imshow(I1);title('實驗人:李詩雨'),xlabel('(c2)DCT變換后的頻域圖像 '); subplot(2,2,3);imshow(I2);title('實驗人:李詩雨'),xlabel('(c3)量化后的頻域圖像 '); subplot(2,2,4);imshow(I3);title('實驗人:李詩雨'),xlabel('(c4) 復原圖像 ');
使用face圖像做實驗,DCT壓縮時,舍掉的變換系數分別小于0.01、0.03、0.05
5.圖像增強
1.灰度線性變換
對曝光不足的圖像采用灰度線性變換對圖像每一個像素灰度做線性拉伸。
clc close all clear all addpath E:\study\數字圖像處理\實驗\5\ figure51.jpg I=imread('figure51.jpg'); %讀取圖片 I=im2double(I); %轉換數據類型為doublefigure(1);subplot(1,2,1); imshow(I);title('實驗人:李詩雨'),xlabel('(a1) 原圖'); %顯示原圖像figure(1);subplot(1,2,2); a = 1.5;b = -150; %增加對比度 o = a .* I + b/255; imshow(o);title('實驗人:李詩雨'),xlabel('(a2) a=1.5,b=-150,增加對比度');2.空間域平滑濾波器
添加均值為0,方差為0.05的高斯噪聲,進行3x3、5x5鄰域平滑,參考課本85頁程序
clc close all clear all addpath E:\study\數字圖像處理\實驗\5\ lena.jpg I=imread('lena.jpg'); %讀取圖片 subplot(2,2,1);imshow(I);title('實驗人:李詩雨'),xlabel('(b1) 原圖'); %顯示原圖像I_noise=double(imnoise(I,'gaussian',0.05)); subplot(2,2,2);imshow(I_noise,[]);title('實驗人:李詩雨'),xlabel('(b2) 加入噪聲后圖像'); I_smoothed1=imfilter(I_noise,fspecial('average',3)); subplot(2,2,3);imshow(I_smoothed1,[]);title('實驗人:李詩雨'),xlabel('(b3) 3x3 鄰域平滑的圖像');I_smoothed2=imfilter(I_noise,fspecial('average',5)); subplot(2,2,4);imshow(I_smoothed2,[]);title('實驗人:李詩雨'),xlabel('(b4) 5x5 鄰域平滑的圖像');3.空間域銳化濾波器
利用Prewitt、Sobel對圖像進行銳化。
clc close all clear all addpath E:\study\數字圖像處理\實驗\5\ lena.jpg I=imread('lena.jpg'); %讀取圖片 subplot(2,2,1);imshow(I);title('實驗人:李詩雨'),xlabel('(c1) 原圖'); %顯示原圖像I_sharpening1=imfilter(I,fspecial('Prewitt')); subplot(2,2,2);imshow(I_sharpening1,[]);title('實驗人:李詩雨'),xlabel('(c2) Prewitt銳化的圖像');I_sharpening2=imfilter(I,fspecial('Sobel')); subplot(2,2,3);imshow(I_sharpening2,[]);title('實驗人:李詩雨'),xlabel('(c3) Sobel銳化的圖像');4.頻域率平滑濾波器(高斯低通濾波器)
實驗(4)使用給定的圖像lena做實驗,參考課本92頁的巴特沃斯低通濾波器程序和課本93頁的(5.31)式子,取n=2即為高斯低通濾波器,sig2=100,sig2=400,sig^2=1600
clc close all clear all addpath E:\study\數字圖像處理\實驗\4\ lena.jpg I=imread('lena.jpg'); subplot(2,2,1);imshow(I);title('實驗人:李詩雨'),xlabel('(d1)原圖 ');I1=fftshift(fft2(I)); [M,N]=size(I1); n=2;sig=10; n1=floor(M/2);n2=floor(N/2); for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);H=exp(-((d^2/(2*sig^2))));%e的指數函數I2(i,j)=H*I1(i,j);end end I2=ifftshift(I2); I3=real(ifft2(I2)); subplot(2,2,2); imshow(I3,[]); title('實驗人:李詩雨'),xlabel('(d2)高斯低通濾波器 sig^2=100 ');n=2;sig=20; n1=floor(M/2);n2=floor(N/2); for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);H=exp(-((d^2/(2*sig^2))));%e的指數函數I2(i,j)=H*I1(i,j);end end I2=ifftshift(I2); I3=real(ifft2(I2)); subplot(2,2,3); imshow(I3,[]); title('實驗人:李詩雨'),xlabel('(d3)高斯低通濾波器 sig^2=400 ');n=2;sig=40; n1=floor(M/2);n2=floor(N/2); for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);H=exp(-((d^2/(2*sig^2))));%e的指數函數I2(i,j)=H*I1(i,j);end end I2=ifftshift(I2); I3=real(ifft2(I2)); subplot(2,2,4); imshow(I3,[]); title('實驗人:李詩雨'),xlabel('(d4)高斯低通濾波器 sig^2=1600 ');
書上公式錯的。。。。
正確公式:
6.圖像復原
1.基于均值濾波器的圖像復原
clc close all clear all addpath E:\study\數字圖像處理\實驗\6\ cameraman.tifI=imread('cameraman.tif'); %讀取圖片 subplot(2,3,1); imshow(I);title('實驗人:李詩雨'),xlabel('(a1)原圖 '); I_noise=double(imnoise(I,'gaussian',0.06)); subplot(2,3,2); imshow(I_noise,[]);title('實驗人:李詩雨'),xlabel('(a2)高斯噪聲污染的圖像 '); I_mean=imfilter(I_noise,fspecial('average',3)); subplot(2,3,3);imshow(I_mean,[]);title('實驗人:李詩雨'),xlabel('(a3)用3x3算數均值濾波器濾波 '); I_mean=exp(imfilter(log(I_noise),fspecial('average',3))); subplot(2,3,4);imshow(I_mean,[]);title('實驗人:李詩雨'),xlabel('(a4)用3x3幾何均值濾波器濾波 '); Q=-1.5; I_mean=imfilter(I_noise.^(Q+1),fspecial('average',3))./imfilter(I_noise.^Q,fspecial('average',3)); subplot(2,3,5);imshow(I_mean,[]);title('實驗人:李詩雨'),xlabel('(a5)Q=-1.5的逆諧波濾波器濾波 '); Q=1.5; I_mean=imfilter(I_noise.^(Q+1),fspecial('average',3))./imfilter(I_noise.^Q,fspecial('average',3)); subplot(2,3,6);imshow(I_mean,[]);title('實驗人:李詩雨'),xlabel('(a6)Q=1.5的逆諧波濾波器濾波 ');2.基于順序統計濾波器的圖像復原
clc close all clear all addpath E:\study\數字圖像處理\實驗\6\ cameraman.tifI=imread('cameraman.tif'); %讀取圖片 subplot(1,4,1); imshow(I);title('實驗人:李詩雨'),xlabel('(b1)原圖 '); I_noise=double(imnoise(I,'salt & pepper',0.06)); subplot(1,4,2); imshow(I_noise,[]);title('實驗人:李詩雨'),xlabel('(b2)椒鹽噪聲污染的圖像 '); I_mean=imfilter(I_noise,fspecial('average',5)); subplot(1,4,3);imshow(I_mean,[]);title('實驗人:李詩雨'),xlabel('(b3)算數均值濾波器濾波 '); I_mean=medfilt2(I_noise); subplot(1,4,4);imshow(I_mean,[]);title('實驗人:李詩雨'),xlabel('(b4)中值濾波器濾波 ');3.基于帶阻濾波器的圖像復原
clc close all clear all addpath E:\study\數字圖像處理\實驗\6\ lenazhouqizaosheng.jpgI=imread('lenazhouqizaosheng.jpg'); %讀取圖片 [M,N]=size(I);%得到圖像的高度和寬度 subplot(1,4,1); imshow(I);title('實驗人:李詩雨'),xlabel('(c1)含有周期噪聲的圖像 '); IF=fftshift(fft2(I));%對含噪圖像作傅里葉變換,并將原定啊移至圖像中心 IFV=log(1+abs(IF));%含噪圖像的頻譜 subplot(1,4,2); imshow(IFV,[]);title('實驗人:李詩雨'),xlabel('(c2)含噪圖像的頻譜 '); freq=90;%設置帶阻濾波器中心頻率 width=5;%設置帶阻濾波器頻帶寬度 ff=ones(M,N); for i=1:Mfor j=1:Nff(i,j)=1-exp(-0.5*((((i-M/2)^2+(j-N/2)^2)-freq^2)/(sqrt(i.^2+j.^2)*width))^2);%高斯帶阻濾波器end endsubplot(1,4,3);imshow(ff,[]);title('實驗人:李詩雨'),xlabel('(c3)高斯帶阻濾波器 '); out=IF.*ff;%矩陣點乘實現頻域濾波 out=ifftshift(out);%原點移回左上角 out=ifft2(out);%傅里葉逆變換 out=abs(out);%取絕對值 out=out/max(out(:));%歸一化subplot(1,4,4);imshow(out,[]);title('實驗人:李詩雨'),xlabel('(c4)濾波效果圖 ');7. 圖像的壓縮編碼
1.游程編碼
clc close all clear all addpath E:\study\數字圖像處理\實驗\7\ lena.jpg%主程序 I=imread('lena.jpg'); %讀取圖片 BW=im2bw(I,0.2); %對圖像二值化,二值化閾值為0.2 [zipped,info]=RLEencode(BW); %調用RLEcode函數對BW進行游程編碼 unzipped=RLEdecode(zipped,info);%調用RLEencode函數對zipped進行游程編碼 subplot(1,3,1);imshow(I);title('實驗人:李詩雨'),xlabel('(a1) 原圖'); %顯示原圖像 subplot(1,3,2);imshow(BW);title('實驗人:李詩雨'),xlabel('(a2) 二值化閾值為0.2,二值化后的圖像'); subplot(1,3,3);imshow(uint8(unzipped)*255);title('實驗人:李詩雨'),xlabel('(a3) 經游程編碼和解碼后的圖像'); %顯示二值圖像經編解碼后的圖像 cr=info.ratio; %顯示壓縮比 whos BW unzipped zipped %顯示二值圖像,壓縮解壓圖像,壓縮圖像的信息%游程編碼函數 function [zipped,info]=RLEencode(vector) [m,n]=size(vector); %獲取圖像的高度和寬度 vector=uint8(vector(:));%轉換成整型 L=length(vector) %得到元素個數 c=vector(1); %獲取第一個像素值 e(1,1)=double(c); %游程矩陣第一列為值 e(1,2)=0; %游程矩陣第二列為游程長度 t1=1; %游程矩陣下標變量 for j=1:L %對圖像所有元素循環處理if(vector(j)==c) %如果值不變e(t1,2)=(e(t1,2))+1; %將游程長度加1else %如果值改變c=vector(j); %記錄新的值t1=t1+1; %游程矩陣行下標變量加1e(t1,1)=double(c); %游程矩陣新1行第1列的值e(t1,2)=1; %游程矩陣新1行第2列的值(游程長度)end endzipped=e; %游程矩陣 info.rows=m;info.cols=n; %記錄原圖像的寬度和高度 [m,n]=size(e); %獲取游程矩陣的高度和寬度 info.ratio=(info.rows*info.cols)/(m*n); %顯示壓縮比 end%游程編碼的解碼函數程序 function unzipped=RLEdecode(zip,info) %zip=uint8(zip); %將游程矩陣轉換成整型 [m,n]=size(zip); %獲取游程矩陣的高度和寬度 unzipped=[]; %解壓矩陣初始化 for i=1:m %對游程矩陣的每一行都進行循環處理section=repmat(uint8(zip(i,1)),1,zip(i,2)); %第i行復制還原unzipped=[unzipped section]; %與矩陣前面的部分進行拼接 end unzipped=reshape(unzipped,info.rows,info.cols); %按原圖像形式重新安排矩陣 end2.基于離散余弦變換的圖像壓縮
根據公式 ,編寫程序計算原圖像和上述三種模板下得到不同的壓縮編碼圖像之間的均方誤差。
e=sqrt(mse(abs(I2-I))); %計算壓縮編碼圖像之間的均方誤差。
8.圖像分割
邊緣檢測
采用sobel、prewitt、roberts和log對圖像及其加上噪聲后的圖像進行邊緣檢測。
clc close all clear all addpath E:\study\數字圖像處理\實驗\8\ chair.jpg a=imread('chair.jpg'); % a=imnoise(a,'gaussian',0.05); bw1=edge(a,'sobel'); bw2=edge(a,'prewitt'); bw3=edge(a,'roberts'); bw4=edge(a,'log',[],4); subplot(2,3,1);imshow(a);title('實驗人:李詩雨'),xlabel('(a1) 原圖'); %顯示原圖像 subplot(2,3,2);imshow(bw1);title('實驗人:李詩雨'),xlabel('(a2) sobel 算子'); subplot(2,3,3);imshow(bw2);title('實驗人:李詩雨'),xlabel('(a3) prewitt 算子'); subplot(2,3,4);imshow(bw3);title('實驗人:李詩雨'),xlabel('(a4) robrtts 算子'); subplot(2,3,5);imshow(bw4);title('實驗人:李詩雨'),xlabel('(a5) log 算子');
加噪聲后:
圖像分割
clc,close all,clear all addpath E:\study\數字圖像處理\實驗\8\ cell.jpg x=imread('cell.jpg'); x=im2double(x); [m,n]=size(x); subplot(1,3,1);imshow(x);title('實驗人:李詩雨'),xlabel('(b1) 原圖'); %顯示原圖像 level=graythresh(x);bw=im2bw(x,level); subplot(1,3,2);imshow(bw);title('實驗人:李詩雨'),xlabel('(b2) 最大類間方差閾值選擇法'); x=double(x);t=(min(x(:))+max(x(:)))/2;done=false; i=0; while ~doner1=find(x<=t);r2=find(x>t);tnew=(mean(x(r1))+mean(x(r2)))/2;done=abs(tnew-t)<1;t=tnew;i=i+1; end x(r1)=0; x(r2)=1; subplot(1,3,3);imshow(x);title('實驗人:李詩雨'),xlabel('(b3) 迭代法');9.彩色圖像分割
clc,close all,clear all addpath E:\study\數字圖像處理\實驗\9\ honghua.jpg rgb=imread('honghua.jpg'); subplot(2,2,1);imshow(rgb);title('實驗人:李詩雨'),xlabel(' 原圖'); %顯示原圖像 rgb1=im2double(rgb); r=rgb1(:,:,1);%圖像的紅色分量 g=rgb1(:,:,2);%圖像的綠色分量 b=rgb1(:,:,3);%圖像的藍色分量 r1=r(130:195,86:170);%在紅分量中選擇一塊矩形區域,由輸入可知size(r)=(195 ,218),改變選擇的行列可以改變標準偏差的標準值 r1_u=mean(mean(r1(:)));%計算該矩形區域的均值 [m,n]=size(r1);%得到該矩形區域的高度和寬度 sd1=0.0;%該區域標準偏差變量 for i=1:mfor j=1:nsd1=sd1+(r1(i,j)-r1_u)*(r1(i,j)-r1_u);%二重循環對差值的平均進行累加end end r1_d=sqrt(sd1/(m*n));%計算得到該區域的標準偏差 r2=zeros(size(rgb1,1),size(rgb1,2));ind=find((r>r1_u-1.10*r1_d)&(r<r1_u+1.10*r1_d));%找到符合條件的點 I1=r2; I1(ind)=1;%將符合條件的點的灰度值賦值為1 subplot(2,2,2);imshow(I1);title('實驗人:李詩雨'),xlabel(' 標準差為1.10'); ind=find((r>r1_u-1.20*r1_d)&(r<r1_u+1.20*r1_d)); I2=r2; I2(ind)=1; subplot(2,2,3);imshow(I2);title('實驗人:李詩雨'),xlabel(' 標準差為1.20'); ind=find((r>r1_u-1.30*r1_d)&(r<r1_u+1.30*r1_d)); I3=r2 I3(ind)=1; subplot(2,2,4);imshow(I3);title('實驗人:李詩雨'),xlabel(' 標準差為1.30');
標準差為1.3效果比較好(但是把綠色也分割進去了)。
10.圖像 的表示和描述
clc,clear,close all; addpath E:\study\大二下\數字圖像處理\實驗\10\紋理圖像集\紋理圖像集 percent=[];%正確率數組 for n=1:10train=[];test=[];index=0;%測試集下標for i=1:8P=randperm(8);%隨機序列for j=1:4train{i,j}=strcat(int2str(i),int2str(P(j)),'.jpg');%隨機訓練集endfor j=5:8index=index+1;test{index}=strcat(int2str(i),int2str(P(j)),'.jpg'); %隨機測試集endend[M,N]=size(train);%訓練集大小X=[];for i=1:Mfor j=1:Nname=char(train(i,j));img_train=imread(name);%讀取訓練集圖片glcm=graycomatrix(img_train,'Offset',[-1 -1],'NumLevels',4);%計算灰度共生矩陣,135度方向,d=1,量化級數4stats = graycoprops(glcm, 'all');%計算對比度、相關、能量、均勻度out= entropy(img_train); %計算出整幅圖的熵X(i,j,:)=[stats.Contrast,stats.Correlation,stats.Energy,stats.Homogeneity,out];%訓練集特征向量endendtruenum=0;for i=1:indexx=[];name=char(test(i));img_test=imread(name);%讀取測試集圖片glcm=graycomatrix(img_test,'Offset',[-1 -1],'NumLevels',4);%計算灰度共生矩陣,135度方向,d=1,量化級數4stats = graycoprops(glcm, 'all');%計算對比度、相關、能量、均勻度out= entropy(img_train); %計算出整幅圖的熵x=[stats.Contrast,stats.Correlation,stats.Energy,stats.Homogeneity,out];%測試集特征向量gix=[];for j=1:Modist=[];%第j類的歐式距離數組for k=1:Na=X(j,k,:);a=a(:)';%訓練集特征向量odist(k)=norm(a-x);%求歐氏距離endgix(j)=min(odist);%第j類中最小歐氏距離end[gjx,mindex]=min(gix);%最小歐氏距離及其類別fprintf('%s屬于第%d類 ',name,mindex);if mod(i,4)==0fprintf('\n');%每四個換一次行endnum=str2num(name(1));%正確的類別if num==mindextruenum=truenum+1;%求分類正確的數量endendpercent(n)=truenum/32;%求分類正確率fprintf('正確率為:%f\n',percent(n)); end fprintf('10次平均正確率為:%f\n',mean(percent));%求平均分類正確率總結
以上是生活随笔為你收集整理的数字图像处理 matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IPC设备产生呼吸效应
- 下一篇: 关于12306火车票销售的简单思考