數字圖像處理相關的小練習

一  基礎部分

1  產生右圖所示圖像f1(m,n),其中圖像大小爲256×256,中間亮條爲128×32,暗處=0,亮處=100。對其進行FFT:

①同屏顯示原圖f1(m,n)和FFT(f1)的幅度譜圖;

②若令f2(m,n)=(-1)(m+n)f1(m,n),重複以上過程,

比較二者幅度譜的異同,簡述理由;

③若將f2(m,n)順時針旋轉90度得到f3(m,n),試顯示FFT(f3)的幅度譜,

並與FFT(f2)的幅度譜進行比較;

④若將f1(m,n)順時針旋轉90度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),

試顯示FFT(f5)的幅度譜,並指出其與FFT(f1)和FFT(f4)的關係;

⑤若令f6(m,n)=f2(m,n)+f3(m,n),試顯示FFT(f6)的幅度譜,並指出其與FFT(f2)和FFT(f3)的關係,比較FFT(f6)和FFT(f5)的幅度譜。

Matlab源代碼:
問題1:
I1=zeros(256);
for i=112:144
    for j=64:192
        I1(j,i)=100;
    end
end
figure;
subplot(121);
imshow(I1);
title('原圖像');
subplot(122);
imshow(abs(fft2(histeq(I1))));
title('原圖像的幅度譜');

問題2:
I2=zeros(256);
for i=112:144
    for j=64:192
        I2(j,i)=(-1).^(i+j)*I1(j,i);
    end
end
figure;
subplot(221);
imshow(I1);
title('原圖像f1');
subplot(222);
imshow(abs(fft2(histeq(I1))));
title('原圖像的幅度譜');
subplot(223);
imshow(I2);
title('中心化後圖像f2');
subplot(224);
imshow(abs(fft2(histeq(I2))));
title('中心化後圖像f2的幅度譜');
分析:f2(m,n)相較f1(m,n)頻譜中心化

問題3:
I3=imrotate(I2,90,'bilinear');
figure;
subplot(131);
imshow(I2);
title('中心化後圖像f2');
subplot(132);
imshow(abs(fft2(histeq(I2))));
title('中心化後圖像f2的幅度譜');
subplot(133);
imshow(abs(fft2(histeq(I3))));
title('旋轉後圖像f3的幅度譜');
分析:f3(m,n)的FFT轉換圖像也是f2(m,n)的FFT轉換圖像左轉90°所得。

問題4:
I4=imrotate(I1,90,'bilinear');
I5=I4+I1;
figure;
subplot(221);
imshow(I1);
title('原圖像f1');
subplot(222);
imshow(abs(fft2(histeq(I5))));
title('相加後圖像f5幅度譜');
subplot(223);
imshow(abs(fft2(histeq(I1))));
title('原圖像的幅度譜');
subplot(224);
imshow(abs(fft2(histeq(I4))));
title('旋轉後圖像f4的幅度譜');
分析:f4(m,n)相較f1(m,n)頻譜順時針旋轉90度

問題5:
I6=I2+I3;
figure;
subplot(221);
imshow(abs(fft2(histeq(I6))));
title('相加後圖像f6幅度譜');
subplot(222);
imshow(abs(fft2(histeq(I5))));
title('相加後圖像f5的幅度譜');
subplot(223);
imshow(abs(fft2(histeq(I2))));
title('中心化後圖像f2的幅度譜');
subplot(224);
imshow(abs(fft2(histeq(I3))));
title('旋轉後圖像f3幅度譜');
分析:f6(m,n)是對f5(m,n)實現了頻譜中心化

2  產生教材104頁題圖4.18(右圖)所示的二值圖像(白爲1,黑爲0),編程實現習題4.18所要求的處理(3*3的平均濾波和中值濾波)功能(圖像四周邊界不考慮,處理結果按四捨五入仍取0或1),顯示處理前後的圖像,比較其異同。

Halcon源代碼:
dev_close_window()
ROW_GEN_DEMO := 30
ROW_GEN_DEMO_0 := ROW_GEN_DEMO * 0
ROW_GEN_DEMO_1 := ROW_GEN_DEMO * 1
ROW_GEN_DEMO_2 := ROW_GEN_DEMO * 2
ROW_GEN_DEMO_3 := ROW_GEN_DEMO * 3
ROW_GEN_DEMO_4 := ROW_GEN_DEMO * 4
ROW_GEN_DEMO_5 := ROW_GEN_DEMO * 5
ROW_GEN_DEMO_6 := ROW_GEN_DEMO * 6
ROW_GEN_DEMO_7 := ROW_GEN_DEMO * 7
ROW_GEN_DEMO_8 := ROW_GEN_DEMO * 8
ROW_GEN_DEMO_9 := ROW_GEN_DEMO * 9
ROW_GEN_DEMO_10 := ROW_GEN_DEMO * 10
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle1)
gen_rectangle1 (ROI_0, ROW_GEN_DEMO_0, ROW_GEN_DEMO_0, ROW_GEN_DEMO_1, ROW_GEN_DEMO_1)
gen_rectangle1 (ROI_1, ROW_GEN_DEMO_2, ROW_GEN_DEMO_0, ROW_GEN_DEMO_3, ROW_GEN_DEMO_1)
gen_rectangle1 (ROI_2, ROW_GEN_DEMO_4, ROW_GEN_DEMO_0, ROW_GEN_DEMO_5, ROW_GEN_DEMO_1)
gen_rectangle1 (ROI_3, ROW_GEN_DEMO_6, ROW_GEN_DEMO_0, ROW_GEN_DEMO_7, ROW_GEN_DEMO_1)
gen_rectangle1 (ROI_4, ROW_GEN_DEMO_8, ROW_GEN_DEMO_0, ROW_GEN_DEMO_9, ROW_GEN_DEMO_1)
gen_rectangle1 (ROI_5, ROW_GEN_DEMO_1, ROW_GEN_DEMO_1, ROW_GEN_DEMO_2, ROW_GEN_DEMO_2)
gen_rectangle1 (ROI_6, ROW_GEN_DEMO_3, ROW_GEN_DEMO_1, ROW_GEN_DEMO_4, ROW_GEN_DEMO_2)
gen_rectangle1 (ROI_7, ROW_GEN_DEMO_5, ROW_GEN_DEMO_1, ROW_GEN_DEMO_6, ROW_GEN_DEMO_2)
gen_rectangle1 (ROI_8, ROW_GEN_DEMO_7, ROW_GEN_DEMO_1, ROW_GEN_DEMO_8, ROW_GEN_DEMO_2)
gen_rectangle1 (ROI_9, ROW_GEN_DEMO_9, ROW_GEN_DEMO_1, ROW_GEN_DEMO_10, ROW_GEN_DEMO_2)
gen_rectangle1 (ROI_10, ROW_GEN_DEMO_0, ROW_GEN_DEMO_2, ROW_GEN_DEMO_1, ROW_GEN_DEMO_3)
gen_rectangle1 (ROI_11, ROW_GEN_DEMO_2, ROW_GEN_DEMO_2, ROW_GEN_DEMO_3, ROW_GEN_DEMO_3)
gen_rectangle1 (ROI_12, ROW_GEN_DEMO_4, ROW_GEN_DEMO_2, ROW_GEN_DEMO_5, ROW_GEN_DEMO_3)
gen_rectangle1 (ROI_13, ROW_GEN_DEMO_6, ROW_GEN_DEMO_2, ROW_GEN_DEMO_7, ROW_GEN_DEMO_3)
gen_rectangle1 (ROI_14, ROW_GEN_DEMO_8, ROW_GEN_DEMO_2, ROW_GEN_DEMO_9, ROW_GEN_DEMO_3)
gen_rectangle1 (ROI_15, ROW_GEN_DEMO_1, ROW_GEN_DEMO_3, ROW_GEN_DEMO_2, ROW_GEN_DEMO_4)
gen_rectangle1 (ROI_16, ROW_GEN_DEMO_3, ROW_GEN_DEMO_3, ROW_GEN_DEMO_4, ROW_GEN_DEMO_4)
gen_rectangle1 (ROI_17, ROW_GEN_DEMO_5, ROW_GEN_DEMO_3, ROW_GEN_DEMO_6, ROW_GEN_DEMO_4)
gen_rectangle1 (ROI_18, ROW_GEN_DEMO_7, ROW_GEN_DEMO_3, ROW_GEN_DEMO_8, ROW_GEN_DEMO_4)
gen_rectangle1 (ROI_19, ROW_GEN_DEMO_9, ROW_GEN_DEMO_3, ROW_GEN_DEMO_10, ROW_GEN_DEMO_4)
gen_rectangle1 (ROI_20, ROW_GEN_DEMO_0, ROW_GEN_DEMO_4, ROW_GEN_DEMO_1, ROW_GEN_DEMO_5)
gen_rectangle1 (ROI_21, ROW_GEN_DEMO_2, ROW_GEN_DEMO_4, ROW_GEN_DEMO_3, ROW_GEN_DEMO_5)
gen_rectangle1 (ROI_22, ROW_GEN_DEMO_4, ROW_GEN_DEMO_4, ROW_GEN_DEMO_5, ROW_GEN_DEMO_5)
gen_rectangle1 (ROI_23, ROW_GEN_DEMO_6, ROW_GEN_DEMO_4, ROW_GEN_DEMO_7, ROW_GEN_DEMO_5)
gen_rectangle1 (ROI_24, ROW_GEN_DEMO_8, ROW_GEN_DEMO_4, ROW_GEN_DEMO_9, ROW_GEN_DEMO_5)
gen_rectangle1 (ROI_25, ROW_GEN_DEMO_1, ROW_GEN_DEMO_5, ROW_GEN_DEMO_2, ROW_GEN_DEMO_6)
gen_rectangle1 (ROI_26, ROW_GEN_DEMO_3, ROW_GEN_DEMO_5, ROW_GEN_DEMO_4, ROW_GEN_DEMO_6)
gen_rectangle1 (ROI_27, ROW_GEN_DEMO_5, ROW_GEN_DEMO_5, ROW_GEN_DEMO_6, ROW_GEN_DEMO_6)
gen_rectangle1 (ROI_28, ROW_GEN_DEMO_7, ROW_GEN_DEMO_5, ROW_GEN_DEMO_8, ROW_GEN_DEMO_6)
gen_rectangle1 (ROI_29, ROW_GEN_DEMO_9, ROW_GEN_DEMO_5, ROW_GEN_DEMO_10, ROW_GEN_DEMO_6)
gen_rectangle1 (ROI_30, ROW_GEN_DEMO_0, ROW_GEN_DEMO_6, ROW_GEN_DEMO_1, ROW_GEN_DEMO_7)
gen_rectangle1 (ROI_31, ROW_GEN_DEMO_2, ROW_GEN_DEMO_6, ROW_GEN_DEMO_3, ROW_GEN_DEMO_7)
gen_rectangle1 (ROI_32, ROW_GEN_DEMO_4, ROW_GEN_DEMO_6, ROW_GEN_DEMO_5, ROW_GEN_DEMO_7)
gen_rectangle1 (ROI_33, ROW_GEN_DEMO_6, ROW_GEN_DEMO_6, ROW_GEN_DEMO_7, ROW_GEN_DEMO_7)
gen_rectangle1 (ROI_34, ROW_GEN_DEMO_8, ROW_GEN_DEMO_6, ROW_GEN_DEMO_9, ROW_GEN_DEMO_7)
gen_rectangle1 (ROI_35, ROW_GEN_DEMO_1, ROW_GEN_DEMO_7, ROW_GEN_DEMO_2, ROW_GEN_DEMO_8)
gen_rectangle1 (ROI_36, ROW_GEN_DEMO_3, ROW_GEN_DEMO_7, ROW_GEN_DEMO_4, ROW_GEN_DEMO_8)
gen_rectangle1 (ROI_37, ROW_GEN_DEMO_5, ROW_GEN_DEMO_7, ROW_GEN_DEMO_6, ROW_GEN_DEMO_8)
gen_rectangle1 (ROI_38, ROW_GEN_DEMO_7, ROW_GEN_DEMO_7, ROW_GEN_DEMO_8, ROW_GEN_DEMO_8)
gen_rectangle1 (ROI_39, ROW_GEN_DEMO_9, ROW_GEN_DEMO_7, ROW_GEN_DEMO_10, ROW_GEN_DEMO_8)
gen_rectangle1 (ROI_40, ROW_GEN_DEMO_0, ROW_GEN_DEMO_8, ROW_GEN_DEMO_1, ROW_GEN_DEMO_9)
gen_rectangle1 (ROI_41, ROW_GEN_DEMO_2, ROW_GEN_DEMO_8, ROW_GEN_DEMO_3, ROW_GEN_DEMO_9)
gen_rectangle1 (ROI_42, ROW_GEN_DEMO_4, ROW_GEN_DEMO_8, ROW_GEN_DEMO_5, ROW_GEN_DEMO_9)
gen_rectangle1 (ROI_43, ROW_GEN_DEMO_6, ROW_GEN_DEMO_8, ROW_GEN_DEMO_7, ROW_GEN_DEMO_9)
gen_rectangle1 (ROI_44, ROW_GEN_DEMO_8, ROW_GEN_DEMO_8, ROW_GEN_DEMO_9, ROW_GEN_DEMO_9)
gen_rectangle1 (ROI_45, ROW_GEN_DEMO_1, ROW_GEN_DEMO_9, ROW_GEN_DEMO_2, ROW_GEN_DEMO_10)
gen_rectangle1 (ROI_46, ROW_GEN_DEMO_3, ROW_GEN_DEMO_9, ROW_GEN_DEMO_4, ROW_GEN_DEMO_10)
gen_rectangle1 (ROI_47, ROW_GEN_DEMO_5, ROW_GEN_DEMO_9, ROW_GEN_DEMO_6, ROW_GEN_DEMO_10)
gen_rectangle1 (ROI_48, ROW_GEN_DEMO_7, ROW_GEN_DEMO_9, ROW_GEN_DEMO_8, ROW_GEN_DEMO_10)
gen_rectangle1 (ROI_49, ROW_GEN_DEMO_9, ROW_GEN_DEMO_9, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10)
dev_clear_window()
union2 (ROI_0, ROI_1, Region_Union)
union2 (ROI_2, Region_Union, Region_Union)
union2 (ROI_3, Region_Union, Region_Union)
union2 (ROI_4, Region_Union, Region_Union)
union2 (ROI_5, Region_Union, Region_Union)
union2 (ROI_6, Region_Union, Region_Union)
union2 (ROI_7, Region_Union, Region_Union)
union2 (ROI_8, Region_Union, Region_Union)
union2 (ROI_9, Region_Union, Region_Union)
union2 (ROI_10, Region_Union, Region_Union)
union2 (ROI_11, Region_Union, Region_Union)
union2 (ROI_12, Region_Union, Region_Union)
union2 (ROI_13, Region_Union, Region_Union)
union2 (ROI_14, Region_Union, Region_Union)
union2 (ROI_15, Region_Union, Region_Union)
union2 (ROI_16, Region_Union, Region_Union)
union2 (ROI_17, Region_Union, Region_Union)
union2 (ROI_18, Region_Union, Region_Union)
union2 (ROI_19, Region_Union, Region_Union)
union2 (ROI_20, Region_Union, Region_Union)
union2 (ROI_21, Region_Union, Region_Union)
union2 (ROI_22, Region_Union, Region_Union)
union2 (ROI_23, Region_Union, Region_Union)
union2 (ROI_24, Region_Union, Region_Union)
union2 (ROI_25, Region_Union, Region_Union)
union2 (ROI_26, Region_Union, Region_Union)
union2 (ROI_27, Region_Union, Region_Union)
union2 (ROI_28, Region_Union, Region_Union)
union2 (ROI_29, Region_Union, Region_Union)
union2 (ROI_30, Region_Union, Region_Union)
union2 (ROI_31, Region_Union, Region_Union)
union2 (ROI_32, Region_Union, Region_Union)
union2 (ROI_33, Region_Union, Region_Union)
union2 (ROI_34, Region_Union, Region_Union)
union2 (ROI_35, Region_Union, Region_Union)
union2 (ROI_36, Region_Union, Region_Union)
union2 (ROI_37, Region_Union, Region_Union)
union2 (ROI_38, Region_Union, Region_Union)
union2 (ROI_39, Region_Union, Region_Union)
union2 (ROI_40, Region_Union, Region_Union)
union2 (ROI_41, Region_Union, Region_Union)
union2 (ROI_42, Region_Union, Region_Union)
union2 (ROI_43, Region_Union, Region_Union)
union2 (ROI_44, Region_Union, Region_Union)
union2 (ROI_45, Region_Union, Region_Union)
union2 (ROI_46, Region_Union, Region_Union)
union2 (ROI_47, Region_Union, Region_Union)
union2 (ROI_48, Region_Union, Region_Union)
union2 (ROI_49, Region_Union, Region_Union)
stop()
region_to_bin (Region_Union, Bin_Image_255, 255, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10)
median_image (Bin_Image_255, Image_Median_bin_255, 'square', 3, 'mirrored')
mean_image (Bin_Image_255, Image_Mean_bin_255, 3, 3)
region_to_label (Region_Union, Image_Label_bin_2, 'int2', ROW_GEN_DEMO_10, ROW_GEN_DEMO_10)
median_image (Image_Label_bin_2, Image_Median_bin_2, 'square', 3, 'mirrored')
mean_image (Image_Label_bin_2, Image_Mean_bin_2, 3, 3)
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle1)
set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')
dev_display (Bin_Image_255)
disp_message (WindowHandle1, '灰度圖像---原圖', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle2)
set_display_font (WindowHandle2, 14, 'mono', 'true', 'false')
dev_display (Image_Median_bin_255)
disp_message (WindowHandle2, '灰度圖像---中值濾波(3*3)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle3)
set_display_font (WindowHandle3, 14, 'mono', 'true', 'false')
dev_display (Image_Mean_bin_255)
disp_message (WindowHandle3, '灰度圖像---平均濾波(3*3)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle4)
set_display_font (WindowHandle4, 14, 'mono', 'true', 'false')
dev_display (Image_Label_bin_2)
disp_message (WindowHandle4, '二值圖像---原圖', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle5)
set_display_font (WindowHandle5, 14, 'mono', 'true', 'false')
dev_display (Image_Median_bin_2)
disp_message (WindowHandle5, '二值圖像---中值濾波(3*3)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, ROW_GEN_DEMO_10, ROW_GEN_DEMO_10, 'black', WindowHandle6)
set_display_font (WindowHandle6, 14, 'mono', 'true', 'false')
dev_display (Image_Mean_bin_2)
disp_message (WindowHandle6, '二值圖像---平均濾波(3*3)', 'window', 0, 0, 'red', 'true')


3  產生教材104頁題圖4.16所示的灰度圖像(白爲255,黑爲0),分別加入高斯白噪聲和椒鹽噪聲,再分別進行3*3的平均濾波和中值濾波,顯示原圖像、加噪圖像和濾波結果圖像,並比較四種濾波結果。

Halcon源代碼:
dev_close_window()
ROW_GENT_TOP    := 22
ROW_GENT_BUTTON := 232
COLUMN_GENT_WIDTH_W   := 7
COLUMN_GENT_WIDTH_B   := 17
COLUMN_INIT           :=27
ROW_GENT_DEMO_0 := COLUMN_INIT + COLUMN_GENT_WIDTH_W
ROW_GENT_DEMO_1 := ROW_GENT_DEMO_0 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_2 := ROW_GENT_DEMO_1 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_3 := ROW_GENT_DEMO_2 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_4 := ROW_GENT_DEMO_3 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_5 := ROW_GENT_DEMO_4 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_6 := ROW_GENT_DEMO_5 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_7 := ROW_GENT_DEMO_6 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_8 := ROW_GENT_DEMO_7 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_9 := ROW_GENT_DEMO_8 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_10 := ROW_GENT_DEMO_9 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_11 := ROW_GENT_DEMO_10 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_12 := ROW_GENT_DEMO_11 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_13 := ROW_GENT_DEMO_12 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_14 := ROW_GENT_DEMO_13 + COLUMN_GENT_WIDTH_W 
ROW_GENT_DEMO_15 := ROW_GENT_DEMO_14 + COLUMN_GENT_WIDTH_B
ROW_GENT_DEMO_16 := ROW_GENT_DEMO_15 + COLUMN_GENT_WIDTH_W 
dev_open_window (0, 0, 256, 256, 'black', WindowHandle)
gen_rectangle1 (ROI_0, ROW_GENT_TOP, COLUMN_INIT, ROW_GENT_BUTTON, ROW_GENT_DEMO_0)
gen_rectangle1 (ROI_1, ROW_GENT_TOP, ROW_GENT_DEMO_1, ROW_GENT_BUTTON, ROW_GENT_DEMO_2)
gen_rectangle1 (ROI_2, ROW_GENT_TOP, ROW_GENT_DEMO_3, ROW_GENT_BUTTON, ROW_GENT_DEMO_4)
gen_rectangle1 (ROI_3, ROW_GENT_TOP, ROW_GENT_DEMO_5, ROW_GENT_BUTTON, ROW_GENT_DEMO_6)
gen_rectangle1 (ROI_4, ROW_GENT_TOP, ROW_GENT_DEMO_7, ROW_GENT_BUTTON, ROW_GENT_DEMO_8)
gen_rectangle1 (ROI_5, ROW_GENT_TOP, ROW_GENT_DEMO_9, ROW_GENT_BUTTON, ROW_GENT_DEMO_10)
gen_rectangle1 (ROI_6, ROW_GENT_TOP, ROW_GENT_DEMO_11, ROW_GENT_BUTTON, ROW_GENT_DEMO_12)
gen_rectangle1 (ROI_7, ROW_GENT_TOP, ROW_GENT_DEMO_13, ROW_GENT_BUTTON, ROW_GENT_DEMO_14)
gen_rectangle1 (ROI_8, ROW_GENT_TOP, ROW_GENT_DEMO_15, ROW_GENT_BUTTON, ROW_GENT_DEMO_16)
union2 (ROI_0, ROI_1, Region_Union)
union2 (ROI_2, Region_Union, Region_Union)
union2 (ROI_3, Region_Union, Region_Union)
union2 (ROI_4, Region_Union, Region_Union)
union2 (ROI_5, Region_Union, Region_Union)
union2 (ROI_6, Region_Union, Region_Union)
union2 (ROI_7, Region_Union, Region_Union)
union2 (ROI_8, Region_Union, Region_Union)
stop()
region_to_bin (Region_Union, BinImage, 255, 0, 256, 256) 
**add a GAUSS noise
for INDEX_gauss_distribution:=0 to 200 by 1
    gauss_distribution (INDEX_gauss_distribution, Distribution_GAUSS)
    add_noise_distribution (BinImage, Image_Noise_Gauss, Distribution_GAUSS)
    wait_seconds (0.03)
endfor
stop()
dev_close_window()
gauss_distribution (50, Distribution_GAUSS)
add_noise_distribution (BinImage, Image_Noise_Gauss, Distribution_GAUSS)
median_image (Image_Noise_Gauss, Image_Median_Noise_Gauss, 'square', 3, 'mirrored')
mean_image (Image_Noise_Gauss, Image_Mean_Noise_Gauss, 3, 3)
dev_open_window (0, 0, 256, 256, 'black', WindowHandle1)
set_display_font (WindowHandle1, 14, 'mono', 'true', 'false')
dev_display (BinImage)
disp_message (WindowHandle1, '灰度圖像---原圖', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle2)
set_display_font (WindowHandle2, 14, 'mono', 'true', 'false')
dev_display (Image_Noise_Gauss)
disp_message (WindowHandle2, '灰度圖像---加入高斯噪聲(50)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle3)
set_display_font (WindowHandle3, 14, 'mono', 'true', 'false')
dev_display (Image_Median_Noise_Gauss)
disp_message (WindowHandle3, '灰度圖像---加入高斯噪聲(中)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle4)
set_display_font (WindowHandle4, 14, 'mono', 'true', 'false')
dev_display (Image_Mean_Noise_Gauss)
disp_message (WindowHandle4, '灰度圖像---加入高斯噪聲(平)', 'window', 0, 0, 'red', 'true')
**add a salt-and-pepper noise
sp_distribution (5, 5, Distribution_S_And_P)
add_noise_distribution (BinImage, Image_Noise_S_And_P, Distribution_S_And_P)
median_image (Image_Noise_S_And_P, Image_Median_Noise_S_And_P, 'square', 3, 'mirrored')
mean_image (Image_Noise_S_And_P, Image_Mean_Noise_S_And_P, 3, 3)
disp_message (WindowHandle4, '灰度圖像---加入高斯噪聲(平)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle5)
set_display_font (WindowHandle5, 14, 'mono', 'true', 'false')
dev_display (BinImage)
disp_message (WindowHandle5, '灰度圖像---原圖', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle6)
set_display_font (WindowHandle6, 14, 'mono', 'true', 'false')
dev_display (Image_Noise_S_And_P)
disp_message (WindowHandle6, '灰度圖像--加入椒鹽噪聲(5*5)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle7)
set_display_font (WindowHandle7, 14, 'mono', 'true', 'false')
dev_display (Image_Median_Noise_S_And_P)
disp_message (WindowHandle7, '灰度圖像---加入椒鹽噪聲(中)', 'window', 0, 0, 'red', 'true')
dev_open_window (0, 0, 256, 256, 'black', WindowHandle8)
set_display_font (WindowHandle8, 14, 'mono', 'true', 'false')
dev_display (Image_Mean_Noise_S_And_P)
disp_message (WindowHandle8, '灰度圖像---加入椒鹽噪聲(平)', 'window', 0, 0, 'red', 'true')


分析:由圖像可以看出,對於均值濾波,由以上處理後的圖像可以看出:均值濾波對高斯噪聲的抑制比較好,處理後的圖像邊緣迷糊較少。但對椒鹽噪聲的影響不大,因爲在削弱噪聲的同時整幅圖像也變得模糊,其噪聲依然存在。

對於中值濾波,有圖像處理的結果可以看出,它隻影響了圖像的基本信息,說明中值濾波對高斯噪聲的抑制效果不明顯。這是因爲高斯噪聲使用隨機大小的幅值污染所有的點,因爲無論怎樣進行數據選擇,得到的始終還是被污染的值。而由圖還可以看出,中值濾波對除去椒鹽噪聲可以起到很好的效果因爲椒鹽噪聲只在圖畫中的部分點隨機出現所以根據中值濾波原理可知,通過數據排序的方法,將圖像中未被噪聲污染的點代替噪聲點的值的概率比較大,因此噪聲的抑制效果很好,同時畫面的輪廓依然比較清晰。由此看來,對於椒鹽噪聲密度較小時,尤其是孤立噪聲點,對中值濾波的效果非常好的。

均值濾波對高斯噪聲有較好的抑制作用,而對於椒鹽噪聲的處理中值濾波要略有優勢。

4  (第 4 、5  題選做一題)對某一灰度圖像,進行如下處理:

(1)分別利用 Roberts 、Prewitt  和 Sobel  邊緣檢測算子進行邊緣檢測;

(2)將 Roberts 、Prewitt 和 和 Sobel  邊緣檢測算子修改爲銳化算子,對原圖像進行銳化,同屏顯示原圖像、邊緣檢測結果和銳化後圖像,說明三者之間的關係。

Halcon源代碼:
read_image (Image, 'C:/Users/Administrator/Desktop/許老師圖像大作業/20161109210038_rUR35.thumb.224_0.jpeg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width*2, Height*2, 'black', WindowHandle)
rgb1_to_gray (Image, Image)
invert_image (Image, Image)
dev_display (Image)
**Roberts edge detection
roberts (Image, Image_Roberts, 'gradient_sum')
threshold (Image_Roberts, Region_roberts, 100, 255)
skeleton (Region_roberts, Skeleton_roberts)
dev_display (Image)
dev_set_color ('green')
dev_display (Skeleton_roberts)

**Prewitt edge detection
prewitt_amp (Image, Image_prewitt)
threshold (Image_prewitt, Region_prewitt, 100, 255)
skeleton (Region_prewitt, Skeleton_prewitt)
dev_display (Image)
dev_set_color ('blue')
dev_display (Skeleton_prewitt)
**Sobel edge detection
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
threshold (EdgeAmplitude, Region_sobel, 100, 255)
skeleton (Region_sobel, Skeleton_sobel)
dev_display (Image)
dev_set_color ('green')
dev_display(Skeleton_sobel)
stop()







發佈了80 篇原創文章 · 獲贊 116 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章