/*對原始圖進行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後的畫素灰階值*/
目前分類:數位影像處理 (4)
- Nov 17 Fri 2006 12:55
數位影像處理-使用C
- Nov 17 Fri 2006 11:59
數位影像處理2-median/max/min/midpoint filter-使用Matlab
使用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                                              Maximum Filter
Minimum Filter                                           Midpoint Filter
- Nov 16 Thu 2006 13:55
數位影像處理1-算數平均濾波器(AMF)-使用Matlab
將之前所產生黑白相間條紋的圖片做平均化,分別以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  
左圖為3x3 filter的結果,右圖為7x7 filter的結果。
- Nov 15 Wed 2006 15:33
影像處理-使用Matlab
%產生一個黑白相間直條紋的圖片
%圖片大小為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