satellite image pre-processing
7 ビュー (過去 30 日間)
古いコメントを表示
Hello,
I have a satellite image with 365 bands. I intend to get the mean of every 8 bands(that is, (b1+b2+b3+b4+b5+b6+b7+b8)/8, then (b9+b10+b11....b16)/8, and so on? does somebody have a code for this?
Thanks, Booker.
0 件のコメント
採用された回答
Bjorn Gustavsson
2012 年 1 月 23 日
Brute looping of this kind of problem shouldn't be too bad.
sz = size(SImg);szMean = sz;
szMean(3) = ceil(szMean(3)/8);
BandMean = zeros(szMean);
for i1 = 1:szMean(3)-1,
BandMean(:,:,i1) = mean(SImg(:,:,8*(i1-1)+[1:8]),3);
end
BandMean(:,:,end) = mean(SImg(:,:,(8*(i1)+1):end),3);
HTH,
0 件のコメント
その他の回答 (1 件)
Walter Roberson
2012 年 1 月 22 日
Some image file formats are able to store multiple bands per image, and imread() can read all the bands in at the same time, either as an X by Y by 3 by Bands or X by Y by Bands array (depending on how the data is stored in the image file.)
You can
s = size(ImageMatrix);
By8 = reshape(ImageMatrix, [s(1:end-1), 8, s(end)/8]);
nd = ndims(By8);
mean(By8,nd)
However, you will have a problem because the number of bands you have is not evenly divisible by 8. How do you want to handle the final 5 bands?
参考
カテゴリ
Help Center および File Exchange で CubeSat and Satellites についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!