亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

灰度與顏色 FFT

灰度與顏色 FFT

C#
海綿寶寶撒 2021-09-19 15:35:32
以下代碼將彩色圖像轉換為灰度,然后計算其 FFT:    private void button1_Click(object sender, EventArgs e)    {        Bitmap source = pictureBox1.Image as Bitmap;        Bitmap gray = Grayscale.ToGrayscale(source);        Complex[,] cpxImage = ImageDataConverter.ToComplex(gray);        Complex[,] fftCpxImage = FourierTransform.ForwardFFT(cpxImage);        Complex[,] shiftedFftCpxImage = FourierShifter.ShiftFft(fftCpxImage);        Bitmap mag = FourierPlot.FftMagnitudePlot(shiftedFftCpxImage, PixelFormat.Format8bppIndexed);        Bitmap phase = FourierPlot.FftPhasePlot(shiftedFftCpxImage, PixelFormat.Format8bppIndexed);        pictureBox2.Image = gray;        pictureBox3.Image =  mag;        pictureBox4.Image = phase;    }以下代碼將彩色圖像分成三個通道,計算它們的 FFT 并將它們合并在一起以形成 FFT 的 RGB 圖像。    private void button2_Click(object sender, EventArgs e)    {        Bitmap source = pictureBox1.Image as Bitmap;        int [,,] array3d = ImageDataConverter.ToInteger3d(source);        int[,] red = ArrayTools<int>.Split(array3d, 0);        int[,] green = ArrayTools<int>.Split(array3d, 1);        int[,] blue = ArrayTools<int>.Split(array3d, 2);        Complex [,] cpxRed = ImageDataConverter.ToComplex(red);        Complex [,] cpxGreen = ImageDataConverter.ToComplex(green);        Complex [,] cpxBlue = ImageDataConverter.ToComplex(blue);        Complex[,] fftCpxRed = FourierTransform.ForwardFFT(cpxRed);        Complex[,] fftCpxGreen = FourierTransform.ForwardFFT(cpxGreen);        Complex[,] fftCpxBlue = FourierTransform.ForwardFFT(cpxBlue);        Complex[,] shiftedFftCpxRed = FourierShifter.ShiftFft(fftCpxRed);        Complex[,] shiftedFftCpxGreen = FourierShifter.ShiftFft(fftCpxGreen);        Complex[,] shiftedFftCpxBlue = FourierShifter.ShiftFft(fftCpxBlue);    }輸出在第一種情況下,結果非常好,正如預期的那樣。在第二種情況下,輸出是全黑的。
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

http://img1.sycdn.imooc.com//6146e8810001646606750050.jpg

這個評論解決了我的問題。


    private void button2_Click(object sender, EventArgs e)

    {

        Bitmap source = (Bitmap)(pictureBox1.Image as Bitmap).Clone();


        int[, ,] array3d = ImageDataConverter.ToInteger3d(source);


        int[,] red = ArrayTools<int>.Split(array3d, 0);

        int[,] green = ArrayTools<int>.Split(array3d, 1);

        int[,] blue = ArrayTools<int>.Split(array3d, 2);


        Complex[,] cpxRed = ImageDataConverter.ToComplex(red);

        Complex[,] cpxGreen = ImageDataConverter.ToComplex(green);

        Complex[,] cpxBlue = ImageDataConverter.ToComplex(blue);


        Complex[,] fftCpxRed = FourierTransform.ForwardFFT(cpxRed);

        Complex[,] fftCpxGreen = FourierTransform.ForwardFFT(cpxGreen);

        Complex[,] fftCpxBlue = FourierTransform.ForwardFFT(cpxBlue);


        Complex[,] shiftedFftCpxRed = FourierShifter.ShiftFft(fftCpxRed);

        Complex[,] shiftedFftCpxGreen = FourierShifter.ShiftFft(fftCpxGreen);

        Complex[,] shiftedFftCpxBlue = FourierShifter.ShiftFft(fftCpxBlue);


        int[,] normRed = FourierNormalizer.Normalize(shiftedFftCpxRed, NormalizeType.Magnitude);

        int[,] normGreen = FourierNormalizer.Normalize(shiftedFftCpxGreen, NormalizeType.Magnitude);

        int[,] normBlue = FourierNormalizer.Normalize(shiftedFftCpxBlue, NormalizeType.Magnitude);


        Bitmap mag = ImageDataConverter.ToBitmap3d(normRed, normGreen, normBlue, PixelFormat.Format8bppIndexed);

        //Grayscale.SetPalette(mag);

        //Bitmap mag = FourierPlot.FftMagnitudePlot(shiftedFftCpxRed, PixelFormat.Format8bppIndexed);

        Bitmap phase = FourierPlot.FftPhasePlot(shiftedFftCpxRed, PixelFormat.Format8bppIndexed);


        pictureBox2.Image = mag;

        pictureBox3.Image = mag;

        pictureBox4.Image = phase;

    }



查看完整回答
反對 回復 2021-09-19
  • 1 回答
  • 0 關注
  • 246 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號