遙感影像16位轉8位

2021-07-24 17:44:15 字數 2469 閱讀 8003

現在常用衛星影像基本上都是16位影像,如gf,zy3,landsat8,wv等,有時我們需要將16位影像降到8位影像,這樣不僅減小了資料量,也便於後期處理。

通常的軟體在處理降位時會存在一些問題,如**,出現空值等。因此,我自己根據常用的降位方法,如最簡單的線性拉伸,分段拉伸以及對數變換和指數變換,結合常用影像的特點,使用百分比截斷和指數(冪為0.7)變換將影像從16位降到8位,在抑制高光的同時保證了影像的對比度。

int imageprocessing::stretch_percent_16to8(const char *infilename, const char *dstfilename)

; const char *pszwkt = null;

//獲取影像空間參考

poin ->getgeotransform(adfingeotransform);

pszwkt = poin ->getprojectionref();

//建立檔案

gdaldriver *podriver = (gdaldriver *)gdalgetdriverbyname("gtiff");

gdaldataset *pooutputds = podriver -> create(dstfilename,src_width,src_height,inbands,gdt_byte,null);

//設定拉伸後影象的空間參考以及地理座標

pooutputds -> setgeotransform(adfingeotransform);

pooutputds -> setprojection(pszwkt);

//讀取影像

cout<<"16位影像降到8位影像處理..." rasterio( gf_read, 0, 0, src_width, src_height , srcdata + 0 * src_width * src_height,src_width,src_height, gdt_uint16, 0, 0 );

//}//統計最大值

for (int src_row = 0; src_row < src_height; src_row ++)

}double *numb_pix = (double *)malloc(sizeof(double)*(src_max+1)); //存畫素值直方圖,即每個畫素值的個數

memset(numb_pix,0,sizeof(double) * (src_max+1));

// ------- 統計畫素值直方圖 ------------ //

for (int src_row = 0; src_row < src_height; src_row ++)

}double *frequency_val = (double *)malloc(sizeof(double)*(src_max+1)); //畫素值出現的頻率

memset(frequency_val,0.0,sizeof(double)*(src_max+1));

for (int val_i = 0; val_i <= src_max; val_i++)

double *accumlt_frequency_val = (double*)malloc(sizeof(double)*(src_max+1)); //畫素出現的累計頻率

memset(accumlt_frequency_val, 0.0,sizeof(double)*(src_max+1));

for (int val_i = 0; val_i <= src_max; val_i ++)

}//統計畫素兩端截斷值

int minval = 0, maxval = 0;

for (int val_i = 1; val_i < src_max; val_i++)

}for (int val_i = src_max-1; val_i > 0; val_i--)

}for (int src_row = 0; src_row < src_height; src_row ++)

else if(src_temval > maxval)

else

*(dstdata + src_col) = pow(stre_temval,0.7) * 250;

}pooutputds->getrasterband(iband + 1)->rasterio(gf_write, 0,src_row,src_width,1,dstdata,src_width,1,gdt_byte,0,0);

free(dstdata);

} free(numb_pix);

free(frequency_val);

free(accumlt_frequency_val);

free(srcdata);

}gdalclose(poin);

gdalclose(pooutputds);

return 0;

}

常用資料轉換,8位轉16位 32位函式,複製就能用

下面包含8 轉 32,32轉8,8轉16,16轉8,16轉32,32轉16等微控制器內常用的資料型別轉換,直接複製就可使用,感覺好用可以加關注,以後會經常更新一些常規好用的小 8位轉32位 len 資料長度 data 資料 說明 剩餘位補0 unsigned int data u32 10 void...

8位深 16位深 24位深

乙個畫素用多少位表示,例如,乙個畫素點,用1位資料表示的話,它有兩種顏色可以選擇 2的1次方,黑白兩種 如乙個畫素點,用8位的資料表示的話,這個點可以有2的8次方 256 種顏色的選擇,同理,16 24等。8位rgb影象 16位rgb影象 這裡的8位是針對rgb影象而言,rgb影象由三個顏色通道組成...

mul和div指令(8位,16位,32位)

無符號乘法指令,預設運算元與eax相乘 這裡只說32位,其他與下面的div類似 格式 mul 運算元 運算元只有乙個運算元與eax相乘,結果共有16位 這裡的16位是16進製制數 高8位放在edx中,低8位放在eax中 執行命令下面的命令,此時,ecx為00000005,eax為ffff fff9 ...