⑴ 關於MATLAB垂直投影法分割數字字元
h為圖像
temp=[];
sum_h=sum(h,1);
for i=1:length(sum_h)-1
if sum_h(i)==0
if sum_h(i+1)~=0
temp=[temp,i];
end
end
end
temp=[1,temp,length(sum_h)];
%temp就是每個字元的列分割點
%如果聯通區域較理想的話,可以先填滿字元再執行上述步驟
⑵ matlab 中 strcat函數的用法
先明白strcat函數的定義:
定義
strcat 即 Strings Catenate,橫向連接字元串。
語法
combinedStr= strcat(s1, s2, ..., sN)
描述
將數組 s1,s2,...,sN 水平地連接成單個字元串,並保存於變數combinedStr中。如果任一參數是元胞數組,那麼結果 combinedStr 是一個元胞數組,否則,combinedStr是一個字元數組。
其實它的作用很簡單就是將多個字元連接成單個字元串,關鍵在於這個語句中括弧裡面的內容,
'D:\thesis\data\gamit\coordinate\' 加了單引號的,就說明單引號裡面的內容為:字元串 ,下面的'\' 與'.org' 相同都只是字元串而已,原樣輸出即可。 置於接下來的 yr 和 model 肯定是先前人為定義的變數,裡面肯定儲存了某些字元串信息的。
那麼這個語句最終實現的結果是:
將「 D:\thesis\data\gamit\coordinate\yr的值\model的值.org」 存於變數filename 中
看程序部能光看一句,這樣這個語句事實上完成了 一個文件的創建,便於接下去程序中實現 調用路徑中的文件數據 或 修改。
ps:如果你學過C語言這個對你來說應該不難
希望採納!
⑶ 求救!幫忙看一段MATLAB圖像處理的程序
X=0; %清空X.
map=0;
[X,map]=imread('lena256x256x8.bmp'); %讀取圖像
p=imfinfo('lena256x256x8.bmp'); %讀取圖像的屬性
s=2^p.BitDepth-1; %計算圖像的最大深度,如8點陣圖像為255.
%-------------------------------------------------------------------------
%簡化的圖像增強演算法:簡化Pmn及T變換的演算法為:
Y=0; %清空Y.
A=0;%清空A.
Y=double(X)./s; %計算P(m,n),相當於求G(x)
%模糊變換演算法
for m=1:p.Height
for n=1:p.Width
if(Y(m,n)<0.5)
A(m,n)=2*Y(m,n)^2;
else
A(m,n)=1-2*(1-Y(m,n))^2;
end
end
end
B=0; %清空B.
B=uint8(A*(2^p.BitDepth-1)); %相當於求逆G-1(x')
%%%區域減影增強演算法
P=0; %清空P.
d=0.00005;%%%%設定冗餘度
k=2;%%%%設定修正參數
for m=1:p.Height
for n=1:p.Width
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^p.BitDepth-1)); %相當於求逆G-1(x')
%%%圖像增強幾種方法效果對比
I=imread('lena256x256x8.bmp'); %讀入圖像
I=double(I); %變成雙精度
K1=filter2(fspecial('average',5),I)/255; %進行濾波
K2=imsubtract(I,K1);
K2=immultiply(K2,0.5);
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('區域減影增強圖像');
⑷ 如何用matlab實現數字手勢的識別
模式識別、機器學習。
一般的做法是:
首先要有一定數量的手勢圖片;
其次將訓練用的手勢圖片進行人工分類,即「打上標簽」
再次將手勢圖片轉換成輪廓圖(可以用DFT、DCT、小波變換等計算出邊緣,然後對邊緣進行「擴張」即可);
第四是將輪廓圖規格化、矢量化,生成向量;
最後以上述向量集來訓練學習機(例如:神經網路),直到回歸;
獲得的結果是能進行手勢識別的學習機。
⑸ matlab編程,尋找字元串中的數字及數字個數
字元串為s
ind=regexp(s,'\d','start');%ind為數字字元在s中的下標
num=length(ind);%num為數字字元的個數
⑹ Matlab處理數字圖像
1、3指的是每個像素由RGB三個數值組合而成(一般是8位,0~255),眾所周知,三原色表示一個像素嗎。你可以讀入一副紅色的圖片,看看第一個分量是不是很大。
2、應該是M*N*3,M*N是圖片的行列相乘,3表示三個RGB分量,他們都是一個位元組的,也就是說M*N*3結果就是位元組了,再除以1024是kb,再除以1024是mb,你最後不要再除以8了。你可以通過whos,who等命令看看圖像數據的單位(是不是uint8類型)。jpg圖像進過離散餘弦變換,再對變換後的圖像頻譜圖進行編碼,壓縮(保留低頻成分數據,簡化高頻成分數據,以至於人們感覺不到圖像有什麼損失),所以一般jpg圖像的文件比較小,讀出來變大了(數據進行解壓了,它裡面不是對應的圖像像素原來的數據)。你讀一個bmp看看,24位的bmp的文件和你讀到後計算的數據應該只差54byte。
⑺ 找出一堆數字中的某個數並且計算個數用MATLAB怎麼編程
A=[1 2 3 2 3 1 3 2 1]
one=sum(A==1)%A中1的個數
⑻ 用MATLAB寫個程序:將10個數字由小到大排序。
%冒泡法排序
a=input('輸入數據:') ;
n=length(a); %求輸入數的個數
i=1;j=1; %賦初值
for j=1:n %進行n次才可互換完
for i=2:n %比較相鄰兩數的大小
if a(i-1)>a(i)
b=a(i);
a(i)=a(i-1);
a(i-1)=b; %比較相鄰兩數的大小,若前大後小則互換位置
end
end
n=n-1; %最後一位不用比較
end
a
個人建議學matlab關鍵是懂C語言,然後再知道一些matlab的常用函數和與C的簡潔之處,在matlab中邊編寫程序邊調試學的最快。
⑼ matlab 數字減去向量得到什麼
1,數字減去向量,相當於把數字擴充成與向量同維度的向量,然後相減
2,這個相當於(6-5):6,四則運算的優先順序高於冒號
3,同上,相當於a(3:6)
⑽ 用matlab編寫一個數進行"四捨五入"成k位有效數字的程序
可以定義一個匿名函數round:
>>round=@(x,n)str2num(sprintf(sprintf('%%.%ig',n),x))
round=
@(x,n)str2num(sprintf(sprintf('%%.%ig',n),x))
>>round(0.00123456,4)
ans=
0.001235
>>round(321.11,2)
ans=
320
其中,第一個例子題主給的答案是錯的。