當前位置:編程學習大全網 - 編程語言 - matlab編程,要求將以下四幅圖片隨機組合形成數碼迷彩。也就是說將四幅圖放到壹幅圖中隨機生成新圖像。

matlab編程,要求將以下四幅圖片隨機組合形成數碼迷彩。也就是說將四幅圖放到壹幅圖中隨機生成新圖像。

先提供壹個半成品,供題主參考。稍後有時間再完善下。

後面有些問題需要題主確認,如果還發現其它問題也歡迎提出來壹並解決。

clear?A

%?各小圖片的特征,1表示有顏色,0表示空白

A(1).Patten?=?[1?0?0?0;?1?1?0?0;?0?1?1?1;?0?1?1?0];

A(2).Patten?=?[1?0?0?0;?1?1?0?0;?0?1?1?1;?0?1?1?0];

A(3).Patten?=?[1?0?0;?1?1?0;?0?1?1;?0?1?1];

A(4).Patten?=?[1?0?0;?1?1?0;?0?1?0;?0?1?1];

%?大圖劃分為M*N個單元小格

M?=?30/2;

N?=?30/2;

%?允許重疊的單元格數量

X?=?0;

%?嘗試1000次生成大圖片,壹旦生成滿足要求的圖片則退出循環

for?attemp?=?1:1000

%?生成空白圖片

B?=?zeros(M,N);

%?將各小圖片依次填入大圖片

for?i=1:length(A)

%?對小圖片隨機做旋轉0、90、180、270度

Rot?=?floor(rand*4);

T?=?A(i).Patten;

for?j=1:Rot

T?=?rot90(T);

end

%?將隨機旋轉後的小圖片隨機填充到大圖片中

[m,n]?=?size(T);

r?=?floor(rand*(M-m))?+?1;

c?=?floor(rand*(N-n))?+?1;

B(r:r+m-1,c:c+n-1)?=?B(r:r+m-1,c:c+n-1)?+?T;

end

%?如果生成的圖片滿足對重疊區域的要求,則退出循環

if?sum(B(:)>1)?<=?X,?break,?end

end

fprintf('\n本次生成數碼迷彩***經過%i次嘗試,圖案如下:\n\n',?attemp)

disp(num2str(B))

pcolor(B)

目前存在以下幾個問題:

1、繪圖。目前暫時用pcolor簡單生成圖片,但存在問題,因為pcolor的數據表現在各單元格的頂點上,而實際上需要的是表現在單元格的面上。稍後考慮更好的繪圖手段。

2、算法也有點小問題。開始的時候我想簡單了,認為既然小圖片由2*2cm的單元小格組成,那就以2為基本單位,把30x30的圖片劃分成15x15個單元格,但編完之後想起來,這種處理是有問題的,例如,小圖片可以從第2cm處(也就是半個單元格)排,這與算法對不上。

3、需要題主確認的兩個問題

(1)下面兩個圖案只有三列單元格,是否考慮存在第四列?也就是說,在往大圖片中排的時候,是否考慮(不旋轉的條件下)最右側要有壹列空白?

(2)現在的圖案其實只有兩種顏色,是否要使用4種不同的顏色對其進行區分?

  • 上一篇:夢見三人桌上擲骰子的預兆。
  • 下一篇:我想買壹臺3000-4000的筆記本電腦,但無從下手!
  • copyright 2024編程學習大全網