主頁 >  其他 > 一種快速簡便優秀的全域曲線調整與區域資訊想結合的非線性彩色增強演算法(多圖深度分析和探索)

一種快速簡便優秀的全域曲線調整與區域資訊想結合的非線性彩色增強演算法(多圖深度分析和探索)

2020-09-11 01:05:42 其他

  本文的分析基于《Adaptive and integrated neighborhood-dependent approach for nonlinear enhancement of color images》一文相關內容,但對其進行了深度的改良,

  我們首先解讀或者說翻譯下這篇論文,

  論文公布的時間是2005年了,已經是比較久遠的了,我第一次看到該論文大概是在2014年,后面在2016年左右實作了該演算法,這里還有當時開發留下的記錄,居然是除夕左右做的,佩服自己,

   以前沒有特別注意到該演算法的效果,覺得也就那樣吧,所以沒有怎么去發揮它,但是,最近再次審視,發現他除了實作實作簡單、速度快,而且還具有效果佳、適應性廣、不破壞本身就光照好的位置等等眾多優點,似乎比目前我看到的低照度增強演算法都好,

  演算法本身的步驟分為三步,第一步是根據的影像亮度分布建立一個自適應的全域映射函式,這一步大大的提高了影像中暗部像素的像素值,同時也壓縮了影像的動態范圍,第二步是所謂的自適應對比度增強,根據像素領域內的平均值和像素值本身的比例,做一個映射,提高整體的對比度,后續還有一個步驟是顏色恢復的程序,

  第一步的全域曲線調整如下所示:

  首先計算出彩色影像的亮度值,這個其實可以有很多方式,包括常用的YUV空間的Y通道,HSL空間的L分量,甚至可以使用我提到的對比度保留去色那種方式獲取,論文里使用的是最普通的計算公式:

        

  我們把亮度歸一化得到:

       

  然后我們用下面這個傳輸函式(映射函式)來將亮度影像進行一個線性的增強:

                          

   其中的引數Z值由影像本身的內容決定,如下所示:

            

  式中的L表示亮度影像的累計直方圖(CDF)達到0.1時的色階值,也就是說如果亮度影像中90%的像素值都大于150,則Z=1,如果10%或者更多的像素值都小于50,則Z取值為0,否則其他情況Z則根據L的值線性插值,

  稍作分析下,如果Z=0,說明影像中存在大量的偏暗像素,影像有必要變亮一些,如果Z=1,則說明影像已經很亮了,則此時影像無需繼續加亮處理,介于兩者之間時,我們也就做中和處理,

  那么我們采用的傳輸函式是否能達到這種需求呢,我們來看下公式(3)的組成和曲線,

       

   以Z=0為例,如上圖2所示,曲線6為公式(3)最后對應的結果,我們看看其組成,公式(3)的第一和第二部分對應圖2中的曲線2和3,他們的和得到曲線4,曲線2中在低亮度區域的增強很顯著,在高亮度區域逐漸變緩,曲線3是一個線性函式,隨亮度增加線性的減少,公式(3)的第三部分對應曲線5,曲線4和曲線5累加后得到曲線6,可見最終的曲線在低亮度區域顯著增強亮度,在高亮度區域緩慢增加亮度,當然這里也是可以采用其他具有類似作用的曲線的,

  對于不同的Z值,影像給出了最終的相應曲線,可見,隨著Z值的增加,曲線逐漸變為一條直線(不變化),而我們前面的自適應Z值計算的程序也隨著影像亮度的增加而增加,也就是說如果圖形原本就很亮,則Z值就越大,基本上影像就沒什么調整了,這基本上就是自適應了,

  第二步:自適應對比度增強,

  經過第一步處理后,影像的亮度自適應的得到了增強,但是影像的對比度明顯減少了,普通的全域對比度增強演算法的程序是使亮的像素更亮,暗的像素更暗(似乎和第一步有點相反的感覺),這樣影像的動態方范圍就更廣了,同時由于這種方法在處理不考慮領域的資訊,對于那些領域和他只有細微的差異的像素,其細節很難得到有效提升,因此,我們需要考慮區域的對比度增強,這種增強下,不同位置相同像素值得像素在增強后可以得到不同的結果,因為他們一般會有不同的領域像素值,當當前像素值比周邊像素的平均值大時,我們增大當前像素值,而當前像素值比周邊像素平均值小時,我們減少它的值,這樣的處理程序結果值和當前像素值的絕對值沒有關系,至于領域資訊有關了,這樣,影像的的對比度和細節都能得到有效的提升,同時影像的動態范圍也有得到有效的壓縮,

  通常,一個比較好的領域計算方式是高斯模糊,我們采用的計算公式如下所示:

                        

  式中,S(x,y)為對比度增強的結果,指數E(x,y)如下所示:

                 

  下標Conv表示卷積,注意這里是對原始的亮度資料進行卷積,P是一個和影像有關的引數,如果原始影像的對比度比較差,P應該是一個較大的值,來提高影像的整體對比度,我們通過求原始亮度圖的全域均方差來決定P值的大小,

                        

  當全域均方差小于3時(說明影像大部分地方基本是同一個顏色了,對比度很差),此時P值取大值,當均方差大于10時,說明原圖的對比度還是可以的,減少增強的程度,均方差介于3和10之間則適當線性增強,

   這個對比度增強的程序分析如下,

   當卷積值小于原始值時,也就是說中心點的亮度大于周邊的亮度,此時E(x,y)必然小于1,由于I’(x,y)在前面已經歸一化,他是小于或等于1的,此時式(7)

 的值必然大于原始亮度值,也就是亮的更亮(這里的亮不是說全域的亮,而是區域的亮),如果卷積值大于原始值,說明中心點的亮度比周邊的暗,此時E(x,y)大于1,導致處式(7)處理后的結果值更暗,

  為了得到更好的對比度增強效果,我們一般都使用多尺度的卷積和增強,因為各個不同的尺度能帶來不同的全域資訊,一般來說,尺度較小時,能提高區域的對比度,但是可能整體看起來不是很協調,尺度較大時,能獲得整體影像的更多資訊,但是細節增強的力度稍差,中等程度的尺度在細節和協調方面做了協調,所以,一般類似于MSRCR,我們用不同尺度的資料來混合得到更為合理的結果,

             

  尺度的大小,我們可以設定為固定值,比如5,20,120等,也可以根據影像的大小進行一個自適應的調整,

  第三步:顏色恢復,

  此步比較簡單,一般就是使用下式:

   

   Lamda通常取值就為1,這樣可以保證影像整體沒有色彩偏移,

  以上就是論文的主要步驟,按照這個步驟去寫代碼也不是一件非常困難的事情:

int IM_BacklightRepair(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride)
{
    int Channel = Stride / Width;
    if (Channel != 3)                                    return IM_STATUS_INVALIDPARAMETER;
    if ((Src =https://www.cnblogs.com/Imageshop/p/= NULL) || (Dest == NULL))                return IM_STATUS_NULLREFRENCE;
    if ((Width <= 0) || (Height <= 0))                    return IM_STATUS_INVALIDPARAMETER;

    int Status = IM_STATUS_OK;
    int RadiusS = 5, RadiusM = 20, RadiusL = 120;
    const int LowLevel = 50, HighLevel = 150;
    const float MinCDF = 0.1f;

    int *Histgram = (int *)calloc(256, sizeof(int));
    unsigned char *Table = (unsigned char *)malloc(256 * 256 * sizeof(unsigned char));        //    各尺度的模糊
    unsigned char *BlurS = (unsigned char *)malloc(Width * Height * sizeof(unsigned char));        //    各尺度的模糊
    unsigned char *BlurM = (unsigned char *)malloc(Width * Height * sizeof(unsigned char));
    unsigned char *BlurL = (unsigned char *)malloc(Width * Height * sizeof(unsigned char));
    unsigned char *Luminance = (unsigned char *)malloc(Width * Height * sizeof(unsigned char));
    if ((Histgram == NULL) || (Table == NULL) || (BlurS == NULL) || (BlurM == NULL) || (BlurL == NULL) || (Luminance == NULL))
    {
        Status = IM_STATUS_OUTOFMEMORY;
        goto FreeMemory;
    }

    float Z = 0, P = 0;
    Status = IM_GetLuminance(Src, Luminance, Width, Height, Stride, false);            //    得到亮度分量
    if (Status != IM_STATUS_OK)    goto FreeMemory;

    for (int Y = 0; Y < Height * Width; Y++)        Histgram[Luminance[Y]]++;        //    統計亮度分量的直方圖

    float Sum = 0, Mean = 0, StdDev = 0;
    for (int Y = 0; Y < 256; Y++)                    Sum += Histgram[Y] * Y;            //    像素的總和,注意用float型別保存
    Mean = Sum / (Width * Height);                                                    //    平均值
    for (int Y = 0; Y < 256; Y++)                    StdDev += Histgram[Y] * (Y - Mean) * (Y - Mean);
    StdDev = sqrtf(StdDev / (Width * Height));                                        //    全域影像的均方差

    int CDF = 0, L = 0;
    for (L = 0; L < 256; L++)
    {
        CDF += Histgram[L];
        if (CDF >= Width * Height * MinCDF)        break;    //    where L is the intensity level corresponding to a cumulative distribution function CDF of 0.1.
    }
    if (L <= LowLevel)
        Z = 0;
    else if (L <= HighLevel)
        Z = (L - LowLevel) * 1.0f / (HighLevel - LowLevel);                            //    計算Z值
    else
        Z = 1;

    if (StdDev <= 3)                                    //    計算P值,Also, P is determined by the globaln standard deviation  of the input intensity image Ix, y as
        P = 3;
    else if (StdDev <= 10)
        P = (27 - 2 * StdDev) / 7.0f;
    else
        P = 1;

    for (int Y = 0; Y < 256; Y++)                    //    Y表示的是I的卷積值
    {
        for (int X = 0; X < 256; X++)                //    X表示的I(原始亮度值)
        {
            float I = X * IM_INV255;                                                                        //    公式2
            I = (powf(I, 0.75f * Z + 0.25f) + (1 - I) * 0.4f * (1 - Z) + powf(I, 2 - Z)) * 0.5f;            //    公式3
            Table[Y * 256 + X] = IM_ClampToByte(255 * powf(I, powf((Y + 1.0f) / (X + 1.0f), P)) + 0.5f);    //    公式7及8
        }
    }

    Status = IM_GaussBlur(Luminance, BlurS, Width, Height, Width, RadiusS);
    if (Status != IM_STATUS_OK)    goto FreeMemory;
    Status = IM_GaussBlur(Luminance, BlurM, Width, Height, Width, RadiusM);
    if (Status != IM_STATUS_OK)    goto FreeMemory;
    Status = IM_GaussBlur(Luminance, BlurL, Width, Height, Width, RadiusL);
    if (Status != IM_STATUS_OK)    goto FreeMemory;

    for (int Y = 0; Y < Height; Y++)
    {
        unsigned char *LinePS = Src + Y * Stride;
        unsigned char *LinePD = Dest + Y * Stride;
        int Index = Y * Width;
        for (int X = 0; X < Width; X++, Index++, LinePS += 3, LinePD += 3)
        {
            int L = Luminance[Index];
            if (L == 0)
            {
                LinePD[0] = 0;    LinePD[1] = 0;    LinePD[2] = 0;
            }
            else
            {
                int Value = https://www.cnblogs.com/Imageshop/p/((Table[L + (BlurS[Index] << 8)] + Table[L + (BlurM[Index] << 8)] + Table[L + (BlurL[Index] << 8)]) / 3);        //    公式13
                LinePD[0] = IM_ClampToByte(LinePS[0] * Value / L);
                LinePD[1] = IM_ClampToByte(LinePS[1] * Value / L);
                LinePD[2] = IM_ClampToByte(LinePS[2] * Value / L);
            }
        }
    }

FreeMemory:
    if (Histgram != NULL)    free(Histgram);
    if (Table != NULL)        free(Table);
    if (BlurS != NULL)        free(BlurS);
    if (BlurM != NULL)        free(BlurM);
    if (BlurL != NULL)        free(BlurL);
    if (Luminance != NULL)    free(Luminance);
}

   為了提高速度,我們構建了一個2維(256*256)大小的查找表,這也是一種很常規的加速方法,

  演算法的代碼部分似乎需要的解釋的部分不多,都是一些常規的處理,也基本就是一步一步按照流程來書寫的,我們來看演算法的效果,

    

    

   由這兩幅圖的結果我們初步得到這樣的結論:一是該演算法很好的保護了原本對比度和亮度就非常不錯的部分(比如兩幅圖的天空部分基本上沒有什么變化),這比一些其他的基于Log空間的演算法,比如本人博客里的MSRCR,全域Gamma校正等演算法要好很多,那些演算法處理后原本細節很不錯的地方會發生較大的變化,這不利于影像的整體和諧性,第二,就是暗部的增強效果確實不錯,很多細節和紋理都能更為清晰的表達出來,

   為了更為清晰的表達出步驟1和步驟2的處理能力,我們把亮度圖、單獨的步驟1的結果圖和單獨的步驟的結果圖,以及步驟1和步驟2在一起的結果圖比較如下:

 

              亮度圖                                            全域曲線調整(步驟1)    

 

          區域對比度增強(步驟2)                                      步驟1和步驟2綜合

  至于如何得到這些中間結果,我想看看代碼稍作修改就應該沒有什么大問題吧,

  可以看到,步驟1的結果圖中有一部分不是很和諧,有塊狀出現,這個在后續的步驟我們會提及如何處理,

  其實我把這四個圖放在一起,我想說的就是經過這么久的閱讀論文,我覺得所有的這類演算法都是應該是這種框架,全域亮度調整+區域對比度調節,不同的演算法只是體現在這兩個步驟使用不同的程序,而想MSRCR這類演算法則把他們在一個程序內同時實作,這樣可能還是沒有本演算法這樣靈活,

  經過嘗試,這里的第一步全域亮度調整如果使用自動色階或者直方圖均衡化后得到的結果并不是很理想,至于為什么,暫時沒有仔細的去想,

  接著我們討論下這個演算法的一些問題及其改進方法, 

  問題一:問題我們注意到在上面的圖中全域亮度調整后的圖中的一些明顯的視覺瑕疵在經過和區域對比度增強混合后在最終的合成圖中似乎表現得并不是那么夸張,但是這并不表明這個問題可以忽視,我們看一下下面這張圖的結果:

     

  雖然原圖的亮度比較低,但是在視覺上原圖的可接受程度要比處理后的圖更為好,這主要是因為處理后的圖在暗處顯示出了很多色塊和色斑,而這些色斑在原圖中是無法直接看到的,經過增強后他們變得非常的突兀,也就是說他們增強的程度過于強烈,這個原因是核心在于步驟的1的全域調整,在圖2中我們看到低亮度處的調整曲線十分的陡峭,這也就意味著增強的程度特別高,會出現的一個現象就是哪怕原始的像素只差1個值,在處理后的結果中會相差幾十以上,視覺中表現為色塊的現象,我們從上述圖的(39,335)坐標處取以20*20的放塊來觀察:

   

  一種簡單的處理方式就是對放大的幅度進行限制,比如一般我們認為,前后處理的結果不應該超過4倍或者其他值,也可以根據影像的內容去自適應設定這個值,這樣就能有效的避免原文出現這樣的問題,修正的代碼如下所示:

int Value = https://www.cnblogs.com/Imageshop/p/((Table[L + (BlurS[Index] << 8)] + Table[L + (BlurM[Index] << 8)] + Table[L + (BlurL[Index] << 8)]) / 3);        //    公式13
float Cof = IM_Min(Value * 1.0f / L, 4);
LinePD[0] = IM_ClampToByte(LinePS[0] * Cof);
LinePD[1] = IM_ClampToByte(LinePS[1] * Cof);
LinePD[2] = IM_ClampToByte(LinePS[2] * Cof);

  當Cof上限位不同值時,效果也有所區別,如下面兩圖所示: 

  

           Cof上限為4                            Cof上限為8

  根據個人的經驗,Cof設定為4基本上能在增強效果和瑕疵之間達到一個平衡,

  問題二:邊緣問題,我們來看下面兩幅測驗圖及其效果:

     

                  原圖                       演算法一次處理                    演算法二次處理后

   

                 原圖                                                                                 演算法二次處理后

  我們注意到,對于這兩幅圖,大部分的增強效果都是非常不錯的,特別是經過二次增強后,演算法的細節和飽和度等都比較不錯,但是注意到在邊緣處,比如小孩的帽子處、圣誕樹和天空的邊緣處等等明顯發黑,也就是說他沒有得到增強,這是怎么回事呢,我們以第一幅圖為例,我們查看下他的亮度圖單獨經過步驟1和步驟2后處理結果:

    

          亮度圖                      全域增強圖                    區域對比度增強圖

  可以看出,全域增強圖在邊緣處未發現有任何問題,而區域對比度圖在邊緣處變得特別黑,我們將亮度圖減去區域對比度增強后的圖得到下圖:      

       

  在頭發邊緣我們看到了明顯的白邊,我們分析下,在頭發邊緣處,像素比較暗,進行卷積時,周邊是天慷訓者窗戶等亮區域,這樣進行卷積時,無論卷積的半徑大小是多少,得到的結果必然是平均值大于中心像素值(而且偏離的比較遠),根據前述的對比度增強的原則,這個時候頭發處就應該變得更黑了,而在遠離邊緣區,卷積的值不會和中心像素值有如此大的差異,應該對比度增強的程度也不會如此夸張,就出現上述最終的結果,我們在本文第一個貼圖的地面影子增強處也用紅色線框標注出了連這種現象,

  此現象在很多具有強邊緣的影像中出現的比較明顯,而對于普通的自然照片一般難以發現,在論文作者提供的素材中似乎未有該現象發生,

  解決這個問題的方案很明顯,需要使用那些能夠保證邊緣不受濾波器影響的或影響的比較少的卷積演算法,這當然就是邊緣保留濾波器的范疇了,雖然現在邊緣濾波器有很多種型別,但是最為廣泛的還是雙邊濾波器、導向濾波等等,我們這里使用導向濾波來試驗下是否能對結果有所改進,

       在導向濾波中,導向的半徑和Eps是影響濾波器最為核心的兩個引數,當Eps固定時,半徑很小時,影像有一種毛絨絨的感覺,稍大一點半徑,則影像能顯示出較好的保邊效果,在非邊緣區則出現模糊效果,而當半徑進一步增大時,整個影像的變換比較小,整體有一種淡淡的朦膿感,當半徑固定時,Eps較小時,影像較為清晰,隨著Eps增加,整個影像就越模糊,到一定程度就和同半徑模糊沒有什么區別了,經過摸索和多次測驗,個人認為半徑引數配置為IM_Min(Width, Height) / 50,Eps引數為20時,能取得非常不錯的保邊效果,此時,我們將前面的三次模糊直接用一個保邊代替,能得到下面的處理效果:

   

  可以明顯的看出邊緣部分得到了完美的解決,無任何瑕疵出現了,

  使用單個保邊濾波代替多尺度的高斯模糊,我偶然在測驗一幅圖中又發現了另外一個問題,如下所示(只是從原圖中截取了部分顯示), 

    

               原圖區域                                                                                   使用單個導向濾波后處理的結果                

  看到處理后的圖,感覺到非常的失望,這個是怎么回事呢,后面我單獨測驗這個圖后面亮度圖對應的導向濾波的結果,發現也是帶有明顯的紋路感覺的結果,而且嘗試了雙邊、表面模糊等其他EPF濾波器也得到了同樣的結果,但是缺意外的發現作者原始的使用多尺度的高斯模糊的結果卻相當的不錯:

  

                 原始多尺度的處理結果                                                                                                                                          高斯單尺度處理結果

  于是我們又重新做了個試驗,把原始的多尺度也改成單尺度的,并且尺度大小和導向濾波用的相同,得到的結果如上圖所示,

  這種分析表明對于這個影像并不是因為我用了導向濾波才導致這個紋路出現的,使用高斯濾波,在單尺度時也一樣有問題,但為什么多尺度時這個問題就消失了呢,

  針對這一現象,我做了幾個方面的分析,第一,確實存在這一類影像,在正常時我們看不出這種塊狀,但是當進行模糊或卷積時,這種塊狀就相當的明顯了,哪怕最為平滑的高斯模糊也會出現明顯的分塊現象,下面是對上述區域原圖分別進行了半徑10和20的高斯并適當加亮(以便顯示):

     

  所以單尺度的高斯模糊處理后的結果也必然會帶有塊狀,但是當我們使用多尺度時,我們注意到尺度不同時這個色塊的邊界是不同的,而我們多個尺度之間時相互求平均值,此時原本在一個尺度上分界很明顯的邊界線就變得較為模糊了,下圖是上面兩個圖求平均后的結果:

       

   相對來說色塊邊界要比前面兩個圖減弱了不少,

  那么對于使用EPF濾波器的程序,我們如果也使用多尺度的方法,能否對結果進行改善呢,我們這樣處理,也采用三個尺度的保邊濾波,一個比一個大,但是保持Eps的值不變,經過測驗,得到的結果如上所示,雖然仔細看還是能看出色塊的存在,但是比原來的要好了很多,

  最后,我們還是來簡單的談下演算法的優化問題,

  第一個可優化的地方是2維查找表的建立程序,開始以為只有65536個元素的計算,所以查找表順序是沒有怎么仔細考慮的,但是實測,這一塊占用的時間還是蠻可觀的,有好幾毫秒,主要是因為這里的powf是個很耗時的程序,所以我們主要稍微把回圈的位置調換一下,就可以減少大量的計算了,如下:

    for (int Y = 0; Y < 256; Y++)                    //    Y表示的I(原始亮度值)
    {
        float InvY = 1.0f / (Y + 0.01f);
        float I = Y * IM_INV255;                                                                        //    公式2
        I = (powf(I, 0.75f * Z + 0.25f) + (1 - I) * 0.5f * (1 - Z) + powf(I, 2 - Z)) * 0.5f;            //    公式3
        for (int X = 0; X < 256; X++)                //    X表示的是I的卷積值
        {
            Table[Y * 256 + X] = IM_ClampToByte(255 * powf(I, powf((X + 0.01f) * InvY, P)) + 0.5f);        //    公式7及8
        }
    }

  然后耗時的部分就是LinePD[0] = IM_ClampToByte(LinePS[0] * Cof);這樣的代碼了,這個也可以通過定點化處理,并配合SSE優化做處理,

  優化完成后的程式處理1080P的24位影像大概需要50ms,

  最后我們分享幾組利用該演算法處理影像的結果,

    

    

    

    

    

    

    

  當然,有些圖在本演算法處理后還可以加上自動色階或直方圖均衡等操作進一步提升影像的質量,

  至此,關于低照度影像的增強演算法,我想我應該不會再怎么去碰他了,也該休息了,

  本文演算法的測驗例程見 : http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,位于選單Enhace->BackLightRepair選單中,

 

 

    

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/3808.html

標籤:其他

上一篇:WebGL簡易教程(十):光照

下一篇:ffmpeg-python 任意提取視頻幀

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more