MatLab對影象處理計算機視覺有用的小函式
阿新 • • 發佈:2019-02-17
部落格上有不少人造輪子,明明一句話就能解決的事,非得花一上午的時間去for迴圈??這是初學資料結構的萌新的做法,如果你已經編寫了足夠程式碼,還是特別喜歡for迴圈去,那你用什麼時間看論文,做研究呢?所以我想收集一些有用的函式。
- 看你的標籤中是否包含某一類:
A = ismember(Label, 12);
label是否包含第12類。
會返回一個矩陣
- 看你的標籤怎麼分割你的圖片的。
BW = boundarymask(Label);
imshow(imoverlay(RGB,BW,'cyan'),'InitialMagnification',67);
上圖:
後一句的效果是視覺化:
為什麼會這樣,因為這就是我要的效果。嗯具體的在我結課後會跟著程式碼一塊放出來。
- 下采樣可以用
B=A(1:2:100,1:2:100)
對A下采樣,間隔2取樣。最後賦值給B
- 然後上取樣居然都是補零的所以我自己寫了一個
for i = 1:1:150
for j = 1:1:240
B((i-1)*8+1:(i-1)*8+9,(j-1)*8+1:(j-1)*8+9)=Visit1(i,j);
end
end
辣雞作者,居然使用for迴圈。
對不起我無能為力了各位,我是真找不著函式,有知道的可以告訴我,提高下我對matlab的理解
連線兩個字串 :
str = ['a','b'];
數字轉換成string
num2str(23,'%4d');
數值陣列轉換成string,不能用上面函式,即使用for依舊會造成混亂,我不知道為什麼。明明除錯moment,num2str(Label)輸出單個元素,比如3,但是如果有個東西在左邊等著賦值,並且有個for迴圈,就會變成整個字串比如1111222333444賦值給a
A = sprintfc('%g',Label);
根據樣本的標籤,畫彩色散點圖
numlabel儲存的是標籤
scatter(Y(:,1),Y(:,2),'filled','cdata',numlabel);
trLabel儲存的是標籤,是double
for i =1 : length(trLabel)
c = trLabel(i)/15;
scatter(Y(i,1),Y(i,2),'filled','cdata',[min(c+1/16,1) min(c-1/16,1) min(1-c,1)]);
hold on;
end
Y第一列儲存橫座標,第二列儲存縱座標。
如果想要自己配色,可以這樣:
% for i = 1:length(Y(:,1))
% scatter(Y(:,1),Y(:,2),4,'MakerFaceColor',[trLabel(:)/20,0.5,0.5]);
% %plot(Y(i,1),Y(i,2),'--rs','MarkerFaceColor','1','Color',[.trLabel(i)*20 25 25]);
% end
c = ['y' 'r' 'c' 'w' 'k' 'b' 'g' 'm'];
for i =1 : length(trLabel)
if numlabel(i)<=8
scatter(Y(i,1),Y(i,2),c(numlabel(i)))
hold on;
elseif numlabel(i) == 9
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.5 0.5 0.5]);
hold on;
elseif numlabel(i) == 10
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.1 0.9 0.5]);
hold on;
elseif(numlabel(i) == 11)
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.3 0,0.7]);
hold on;
elseif(numlabel == 12)
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.9 0 0.5]);
hold on;
else
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.9 0.9 0.5]);
hold on;
end
end
樣本點只有邊緣上色,空心圓,nz是空心圓大小。後面的三個[x y z]是顏色,取值範圍[0,1].如果在最後面加了'd'那就是菱形了。
scatter(Y(i,1),Y(i,2),nz,'MarkerEdgeColor',[0.5 0.5 0.5],'d');
事實上除了功能性函式,還有計算型函式更加的重要,要完成一個計算公式,不同的函式會使用不同的記憶體,不同的方式,也有不同的完成時間,不同的表達形式。
舉個例子:如果用for迴圈完成bsxfun的功能就會花更多的時間。
而2016版之後直接拋棄的bsxfun函式,兩個不同維度的矩陣,張量,是直接可以相加相乘,各種操作的。
所以,找到最簡便的方法就很重要。