1.知識(shí)儲(chǔ)備
1.0 window系統(tǒng)截圖(當(dāng)前窗口)
Alt + PrintScreen
1.1 Matlab中 K-means聚類函數(shù)
[Idx,Ctrs,SumD,D] = kmeans(X,K,'Replicates',3,'Options',opts);
%調(diào)用Kmeans函數(shù)
%X N*P的數(shù)據(jù)矩陣
% K: 聚類數(shù)目
%Idx N*1的向量,存儲(chǔ)的是每個(gè)點(diǎn)的聚類標(biāo)號(hào)
%Ctrs K*P的矩陣,存儲(chǔ)的是K個(gè)聚類質(zhì)心位置
%SumD 1*K的和向量,存儲(chǔ)的是類間所有點(diǎn)與該類質(zhì)心點(diǎn)距離之和
%D N*K的矩陣祸挪,存儲(chǔ)的是每個(gè)點(diǎn)與所有質(zhì)心的距離;
[Idx,Ctrs,SumD,D] = kmeans(X,K,'Replicates',3,'Options',opts);
1.2 注釋
在MATLAB中可以在行首部加%來進(jìn)行注釋,加%%+空格來進(jìn)行劃分不同的程序段粉臊。
但在進(jìn)行多行注釋時(shí)睬魂,針對(duì)單行進(jìn)行操作過于麻煩,可以利用快捷鍵進(jìn)行多行注釋糠馆。
可以先選中需要注釋的行擦盾,然后按“ctrl+R”進(jìn)行注釋窗怒,
如果要取消多行注釋,則在選中的基礎(chǔ)上吏恭,按“ctrl+T”拗小。
1.3 matlab判斷數(shù)據(jù)的類型
用class(var)指令獲取矩陣類型
1.4 matlab 讀取.mat文件 matlab將struct和cell轉(zhuǎn)換成matrices
之前將數(shù)組或者矩陣保存為一個(gè)mat格式的文件,在進(jìn)行l(wèi)oad命令讀取時(shí):
bank = load('filterBank.mat');
得到的bank是struct類型的數(shù)據(jù)樱哼,而想要的是一個(gè)矩陣或者數(shù)組哀九。
將命令:
bank = load('filterBank.mat');
改寫為:
bank = cell2mat(struct2cell(load('filterBank.mat')));
得到的bank即為矩陣。
1.5 matlab清空控制臺(tái)
命令語句: clc
1.6 matlab二維矩陣輸出彩色圖像
imagesc(colorLabelIm)
colorbar
1.7 matlab畫圖
data = randn(4,100);
figure(1);
subplot(221);plot(data(1,:));
subplot(222);plot(data(2,:));
subplot(223);plot(data(3,:));
subplot(224);plot(data(4,:));
suptitle('總圖標(biāo)題');
2. segmentMain.m
origIm4 =imread('E:\桌面\1研究生相關(guān)\研一上\機(jī)器視覺基礎(chǔ)\Proj1-Texture\Texture\a2-code-data\dress.jpg');
origIm1 =imread('E:\桌面\1研究生相關(guān)\研一上\機(jī)器視覺基礎(chǔ)\Proj1-Texture\Texture\a2-code-data\circle-im-1.jpg');
origIm2 =imread('E:\桌面\1研究生相關(guān)\研一上\機(jī)器視覺基礎(chǔ)\Proj1-Texture\Texture\a2-code-data\butterfly.jpg');
origIm3 =imread('E:\桌面\1研究生相關(guān)\研一上\機(jī)器視覺基礎(chǔ)\Proj1-Texture\Texture\a2-code-data\circle-im-2.jpg');
origIm =imread('E:\桌面\1研究生相關(guān)\研一上\機(jī)器視覺基礎(chǔ)\Proj1-Texture\Texture\a2-code-data\gumballs.jpg');
%[width,height] = size(origIm);
[height,width] = size(origIm);
subplot(1,3,1);
imshow(origIm)
title('原圖像');
%bank = load('filterBank.mat');
bank = cell2mat(struct2cell(load('filterBank.mat')));
str =class(bank); %判斷bank類型 disp(str);
imStack = {rgb2gray(origIm)} ; %
%imStack = {rgb2gray(origIm),rgb2gray(origIm1),rgb2gray(origIm2),rgb2gray(origIm3),rgb2gray(origIm4)};
% disp(bank); %打印過濾器
[m,n,l] =size(bank);
bankNum1 = size(bank, 1);
bankNum2 = size(bank, 2);
bankNum = size(bank, 3);
disp(bankNum);
% disp(bankNum1);
% disp(m);
% disp(n);
% disp(l);
winSize = 10;
numColorRegions =10; % 聚類數(shù)
numTextureRegions = 50 ; % 聚類數(shù)
%bank =ones(5,6,7);
%textons_x = 600;
%textons =ones(textons_x,bankNum);
k = 100; %紋理基元的紋理編碼集個(gè)數(shù)
textons = createTextons(imStack, bank, k);
%height = 100 ;
%winSize =ones(height,height);
%colorLabelIm = ones(height, width) ;
%textureLabelIm =ones(height, width);
[colorLabelIm, textureLabelIm] = compareSegmentations(origIm, bank, textons, winSize, numColorRegions, numTextureRegions);
% disp(colorLabelIm);
[mc,nc,lc] =size(colorLabelIm);
[mt,nt,lt] =size(textureLabelIm);
fprintf('row is %d,col is %d,%d ',mc,nc,lc);
fprintf('row is %d,col is %d,%d ',mt,nt,lt);
subplot(1,3,2);
%imshow(uint8(colorLabelIm));% 輸出為黑白圖
x2=[150+width,350+2*width];
y2=[50+height,50+2*height];
imagesc(x2,y2,colorLabelIm)
colorbar
%colorbar('position',[0.32 0.01 0.3 0.5])
title('顏色分割');
subplot(1,3,3);
%imshow(uint8(textureLabelIm));% 輸出為黑白圖
x3=[250+2*width,450+3*width];
y3=[50+2*height,50+3*height];
imagesc(x3,y3,textureLabelIm)
%imagesc(textureLabelIm)
colorbar %定義圖例位置大小
title('紋理分割');
%suptitle('圖像名:gumballs.jpg 濾波器: filterBank 條件:winSize=%d nColor=%d nTexture=%d texttonsNum=%d ',winSize,numColorRegions,numTextureRegions,k);
suptitle('圖像名:gumballs.jpg 濾波器: filterBank 條件:winSize= nColor= nTexture= texttonsNum= ')
% imshow(colorLabelIm,[]); % 輸出為黑白圖
2.1 精簡改良版
3.錯(cuò)誤解析
3.1 Error using conv2 N-D arrays are not supported
For color images, imread returns a 3D array where the 3rd dimension has 3 elements for R, G, B. You need to convert the image to grey-value first. Or do the convolution on the color image using convn.
rgb2gray(origIm);
參考資料
[0] 基于k-均值聚類的圖像分割
[1]MATLAB K-means聚類的介紹與使用
[2] [初學(xué)筆記] matlab中 怎么判斷輸入的數(shù)據(jù)類型
[3]matlab—load命令讀的數(shù)據(jù)為struct類型的數(shù)據(jù)的處理方法
[4] struct2cell
[5] matlab中元胞數(shù)組的創(chuàng)建與內(nèi)容讀取
[6]淺析image,imagesc,imshow的用法
[7] Error using conv2 N-D arrays are not supported
[8]subplot畫圖添加總標(biāo)題
[9] matlab怎么同時(shí)顯示imshow 兩幅圖片
[10] 171103 Matlab subplot 用法
[11] matlab 中imagesc的用法
[12] Matlab的圖像操作——colorbar的各項(xiàng)細(xì)節(jié)操作