目前分類:數位影像處理 (4)

瀏覽方式: 標題列表 簡短摘要

/*對原始圖進行subsample,使原本的pixels變為1/n倍
此程式在此對256x256 pixels進行subsampling使其變成64x64 pixels*/

#include
#include

#define ROWS 256 /*定義原始圖形的行數*/
#define COLUMNS 256 /*定義原使圖形的列數*/

#define sqr(x) ((x)*(x))

int main( int argc, char **argv )
{
int i;
int j;
int k;
int threshold;
FILE *fp;
char *ifile, *ofile;
unsigned char image[ROWS][COLUMNS]; /*用來儲存原始圖片畫素灰階值*/
unsigned char image4[ROWS/4][COLUMNS/4];/*用來儲存subsampling後的畫素灰階值*/

Irwinlin 發表在 痞客邦 留言(1) 人氣()

使用Median filter, Maximum filter, Minimum filter, midpoint filter在之前所產生黑白相間條紋的圖片,以一個(2n+1)x(2n+1)pixels的矩陣來實現 。原始圖形如下:

以下使用matlab來對各種filter以3x3 pixels來實現,使用matlab的好處是median, max, min都有函數可以直接用,不用另外寫。

n=input('The (2n+1)x(2n+1) matrix of the filter, n=')
%if 3x3 pixels matrix, please input n=1, if 5x5, please input n=2 and so on.
%首先初始化四個矩陣,以便存取濾波後的圖形,矩陣的大小為256x256
for k1=1:256
for l1=1:256
image_medf(k1,l1)=bwimage(k1,l1);
image_maxf(k1,l1)=bwimage(k1,l1);
image_minf(k1,l1)=bwimage(k1,l1);
image_midf(k1,l1)=bwimage(k1,l1);
i1=1; %用來計數

%對某一個pixel(k1,l1),選取以其為中心之3x3 pixels的灰階值,記錄於temp
%忽略邊界效應,也就是不計算無法被這個3x3 filter覆蓋的pixels
%所以對3x3 filter而言,k1和l1從第2 pixel計算到255個pixel
if k1>1&&l1>1&&k1
%You can find the raw data in the director c:\DIP
fout=fopen('c:\DIP\image_medf','w');
for i1=1:256
ori=fwrite(fout,image_medf(i1,:),'uchar');
end;
fclose(fout);

fout=fopen('c:\DIP\image_maxf','w');
for i2=1:256
ori=fwrite(fout,image_maxf(i2,:),'uchar');
end;
fclose(fout);

fout=fopen('c:\DIP\image_minf','w');
for i3=1:256
ori=fwrite(fout,image_minf(i3,:),'uchar');
end;
fclose(fout);

fout=fopen('c:\DIP\image_midpf','w');
for i4=1:256
ori=fwrite(fout,image_midpf(i4,:),'uchar');
end;
fclose(fout);

以3x3 filter實現的結果分別如下:
Median Filter&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Maximum Filter

Minimum Filter&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMidpoint Filter


Irwinlin 發表在 痞客邦 留言(1) 人氣()

將之前所產生黑白相間條紋的圖片做平均化,分別以3x3 pixels,5x5 pixels, 7x7 pixels三種filter來做平均化。原始圖形如下:

以下使用matlab來做算數平均濾波器(AMF)


%首先初始化三個矩陣,以便存取濾波後的圖形,矩陣的大小為256x256
for k1=1:256
for l1=1:256
image_amf33(k1,l1)=bwimage(k1,l1);
image_amf55(k1,l1)=bwimage(k1,l1);
image_amf77(k1,l1)=bwimage(k1,l1);

%temp1,temp2,temp3累加濾波矩陣內的灰階值,以便計算平均值
temp1=0;
temp2=0;
temp3=0;

%對某一個pixel(k1,l1),計算以其為中心之3x3 pixels的平均值
%忽略邊界效應,也就是不計算無法被這個3x3 filter覆蓋的pixels
%所以對3x3 filter而言,k1和l1從第2 pixel計算到255個pixel
if k1>1&&l1>1&&k1
%對某一個pixel(k1,l1),計算以其為中心之5x5 pixels的平均值
if k1>2&&l1>2&&k14&&l1>4&&k1 &nbsp

左圖為3x3 filter的結果,右圖為7x7 filter的結果。

Irwinlin 發表在 痞客邦 留言(0) 人氣()


%產生一個黑白相間直條紋的圖片
%圖片大小為256x256 pixels
%白條紋的寬度為7 pixels,長度為210 pixels
%黑條紋的寬度為17pixels

%首先產生一個256x256 pixels的全黑(0)矩陣
%bwimage stands for black and white image
for i1=1:256
for j1=1:256
bwimage(i1,j1)=0;
end
end

%產生全黑(0)的一列
for i2=1:256
bwrow(i2)=0;
end

%在這列寫入黑白相間週期性訊號,空間週期為24 pixels
%白色灰階值為255,總共9個週期性0及255組成的方波
%255的長度為7pixels,0的長度為17個pixels
%bwrow stands for black and white row
for i3=30:36
for j3=1:9
bwrow(i3+24*(j3-1))=255;
end
end

Irwinlin 發表在 痞客邦 留言(2) 人氣()