Social Icons

twitterfacebookgoogle plusrss feedemail

4/14/2013

影像處理 -均值濾波器 (mean Filter)


在影像上如果有一些圖片銳度如果太高(上圖),我們可以使用均值濾波器來做一些平滑的處理,讓某些圖片看起來比較自然一點(下圖)
點圖可放大
所謂的均值,也就是平均值的意思,意思就是先找一個點為中心,把3*3的範圍加總起來做平均寫入覆蓋原本的值。

程式碼

#include <iostream>
#include <cstdlib>

#include "bmp.h"

using namespace std;

int R[MaxBMPSizeX][MaxBMPSizeY];
int G[MaxBMPSizeX][MaxBMPSizeY];
int B[MaxBMPSizeX][MaxBMPSizeY];
int width, height;

int main(int argc, char* argv[])
{
    int x, y;
    // 加強值 
    int value;
    
    char* file_name;
    // 圖檔名稱 
    file_name = "Butterfly.bmp";
    
    // 開啟並讀取全彩(24bits)bmp 影像圖檔,如果是灰階影像只要存取RGB其中一項即可!
    // RGB 三個 channel 的值存入 R, G, B 三個自訂的陣列中
    // 陣列大小規定是 MaxBMPSizeX * MaxBMPSizeY
    // 同時取得該影像圖檔的高度和寬度
    open_bmp( file_name, R, G, B, width, height);

    // 影像處理(均值濾波)
    for (x = 1 ; x < width-1 ; x++) {
        for (y = 1; y < height-1 ; y++) {

            R[x][y] = (   R[x-1][y-1] +  R[x-1][y] +  R[x-1][y+1] +
                          R[x][y-1] +  R[x][y] +  R[x][y+1] +
                          R[x+1][y-1] +  R[x+1][y] +  R[x+1][y+1] ) / 9;  


            G[x][y] = (   G[x-1][y-1] +  G[x-1][y] +  G[x-1][y+1] +
                          G[x][y-1] +  G[x][y] +  G[x][y+1] +
                          G[x+1][y-1] +  G[x+1][y] +  G[x+1][y+1] ) / 9;  

            B[x][y] = (  B[x-1][y-1] +  B[x-1][y] +  B[x-1][y+1] +
                          B[x][y-1] +  B[x][y] +  B[x][y+1] +
                         B[x+1][y-1] + B[x+1][y] +  B[x+1][y+1] ) / 9;  
        }
    }
    // 儲存處理結果至新的圖檔中
    save_bmp("new_filter.bmp", R, G, B);
    // 關閉 bmp 影像圖檔
    close_bmp();
    


    system("PAUSE");
    return 0;

}

程式碼下載
載點1  載點2
(執行環境Visual C 2012 不能執行請重新編譯)

沒有留言:

張貼留言

俗話說
凡走過必留下痕跡,凡住過必留下鄰居
凡爬過必留下樓梯,凡來過必留下IP
看過文章之後歡迎留下您寶貴的意見喔!

 
 
无觅相关文章插件,迅速提升网站流量