? ? ? ?uu們!大家好,2025年的新年就要到來,咸魚哥在這里祝大家在2025年每天開心快樂,天天掙大錢,自由自在,健健康康,萬事如意!(要是咸魚哥嘴笨的話,還望大家多多包涵!因為咸魚哥不太機靈。。。沒辦法(單純就是不太會表達自己的意思,所以過年不太討喜emmm...))在本章,咸魚哥主要是針對于銳化空間濾波的概念和方法來進行實驗的操作和代碼的講解,uu們!我們開始本章實驗吧!
一、基礎知識
?1.拉普拉斯變換(算子):
? ?在數字圖像處理中:
? ? (實際上這個算式很好理解,在3*3的蒙板中,我們的中心為(x,y),而算式中的前四個就是和(x,y)四鄰接的四個方塊的值,實際上就是十字上的處中心的值相加,然后再減去中心(x,y)的4倍值就可以計算出來了。)
? ?注:這個蒙板只是一個例子,并不是規定中心一定為負數,還有以下的形式,包括中心點為正,還有和不為零等情況。
增強方法:
2、sobel變換(算子):
二、具體要求
? ? ? ?1、依據拉普拉斯算子,選用模板1~8對自選圖(不能選圖例1)進行銳化處理;依據Sobel算子選用模板9~10對自選圖(不能選圖例2)進行邊緣檢測。
? ? ? ? 2、應用拉普拉斯算子時,每種模板的對應輸出圖包 含“原圖”、“依據模板X(X代表模板數)濾波后”、“拉普拉斯銳化后”3個子圖,因此對于拉普拉斯銳化有8 個輸出圖,一共24個子圖,每個子圖都要有上述對 應的3個子圖名。 應用Soble算子時,為1張輸出圖,包含3個子圖:“原圖”、“行檢測”、“列檢測”。
三、應用編程
? ? ? ? 輸入透射CT(全身或局部)圖像,設計一個算法流程, 進行層次化的圖像增強,得到增強效果更好的結果圖像。
要求如下:
? ? ? 1. 使用高斯濾波進行預處理,減少noise;
? ? ? 2. 使用拉普拉斯濾波進行細節增強;
? ? ? 3. 使用Sobel 邊緣檢測增強邊緣;
? ? ? 4. 對比度受限的低對比度區域使用自適應直方圖 均衡化提升對比度;
? ? ? 5. 用中值濾波去除噪聲點;
? ? ? 6. 分析比較不同階段的圖像效果;
? ? ? 7. 將上述所有濾波方法進行優化組合獲得增強圖。
四、編程
img = imread('1.png'); % 替換為你的圖像路徑 % 從指定路徑讀取圖像文件
img_gray = rgb2gray(img); % 轉換為灰度圖像 % 將讀取的彩色圖像轉換為灰度圖像A=-8; % 定義一個變量A,用于后續模板中的計算% 拉普拉斯模板(示例,你可以根據需要定義其他模板)
laplacian_templates = { % 定義一個cell數組,存儲不同的拉普拉斯模板[0 1 0; 1 -4 1; 0 1 0], % 模板1[1 1 1; 1 -8 1; 1 1 1], % 模板2[0 -1 0; -1 4 -1; 0 -1 0], % 模板3[-1 -1 -1; -1 8 -1; -1 -1 -1], % 模板4% 增強模板5(負中心,增強邊緣檢測效果)[0 1 0; 1 (A-4) 1; 0 1 0], % 模板5,中心系數為A-4% 增強模板6(負中心,同樣增強邊緣檢測效果)[1 1 1; 1 (A-8) 1; 1 1 1], % 模板6,中心系數為A-8% 增強模板7(正中心,用于強調中心像素)[0 -1 0; -1 (A+4) -1; 0 -1 0], % 模板7,中心系數為A+4% 增強模板8(正中心,增強中心像素的影響)[-1 -1 -1; -1 (A+8) -1; -1 -1 -1] % 模板8,中心系數為A+8
};% 拉普拉斯算子處理并顯示結果,每個模板一個窗口
for i = 1:length(laplacian_templates)figure; % 創建新窗口 % 為每個模板的處理結果創建一個新的顯示窗口% 原圖subplot(1, 3, 1); % 在1行3列的子圖中占據第1個位置imshow(img_gray); % 顯示灰度圖像title(['原圖 - 模板' num2str(i)]); % 設置標題,顯示當前處理的模板編號% 依據模板濾波后filtered_img = imfilter(double(img_gray), laplacian_templates{i}, 'same', 'replicate'); % 使用拉普拉斯模板進行濾波subplot(1, 3, 2); % 在1行3列的子圖中占據第2個位置imshow(filtered_img, []); % 顯示濾波后的圖像,使用空矩陣[]自動調整顯示范圍title(['依據模板' num2str(i) '濾波后']); % 設置標題% 拉普拉斯銳化后sharpened_img = double(img_gray) - filtered_img; % 通過原圖減去濾波后的圖像進行銳化sharpened_img = uint8(sharpened_img); % 將結果轉換為uint8類型subplot(1, 3, 3); % 在1行3列的子圖中占據第3個位置imshow(sharpened_img); % 顯示銳化后的圖像title(['拉普拉斯銳化后 - 模板' num2str(i)]); % 設置標題
end
結果:
? ? ? ? 應用代碼:
% Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1]; % Sobel算子的x方向模板
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1]; % Sobel算子的y方向模板% 行檢測(注釋說明了不推薦手動執行卷積操作的原因)
edge_x = imfilter(double(img_gray), sobel_x, 'same', 'replicate'); % 使用Sobel x方向模板進行濾波
edge_x = uint8(255 * mat2gray(edge_x)); % 將濾波結果歸一化到0-255范圍并轉換為uint8類型% 列檢測(同理,使用Sobel y方向模板進行濾波)
edge_y = imfilter(double(img_gray), sobel_y, 'same', 'replicate'); % 使用Sobel y方向模板進行濾波
edge_y = uint8(255 * mat2gray(edge_y)); % 將濾波結果歸一化到0-255范圍并轉換為uint8類型% 顯示結果
figure; % 創建一個新的顯示窗口
% 原圖
subplot(1, 3, 1); % 在1行3列的子圖中占據第1個位置
imshow(img_gray); % 顯示灰度圖像
title('原圖'); % 設置標題% 行檢測
subplot(1, 3, 2); % 在1行3列的子圖中占據第2個位置
imshow(edge_x); % 顯示行檢測的結果
title('行檢測'); % 設置標題% 列檢測
subplot(1, 3, 3); % 在1行3列的子圖中占據第3個位置
imshow(edge_y); % 顯示列檢測的結果
title('列檢測'); % 設置標題
? ? ? ?結果:
代碼:
% 讀取CT圖像
ct_img = imread('1.png'); % 替換為你的CT圖像路徑
ct_img_gray = rgb2gray(ct_img); % 轉換為灰度圖像% 1. 使用高斯濾波進行預處理,減少噪聲
filtered_img = imgaussfilt(ct_img_gray, 2); % 對灰度圖像進行高斯濾波% 2. 使用拉普拉斯濾波進行細節增強
laplacian_kernel = [0 -1 0; -1 4 -1; 0 -1 0]; % 拉普拉斯算子
detail_enhanced = imfilter(double(filtered_img), laplacian_kernel, 'same', 'replicate'); % 對濾波后的圖像進行拉普拉斯濾波
detail_enhanced = double(filtered_img) - detail_enhanced; % 使用原圖減去拉普拉斯濾波結果進行細節增強
detail_enhanced = uint8(detail_enhanced); % 轉換為uint8類型% 定義Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1]; % Sobel算子的x方向分量
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1]; % Sobel算子的y方向分量% 3. 使用Sobel 邊緣檢測增強邊緣
edge_x = imfilter(double(detail_enhanced), sobel_x, 'same', 'replicate'); % 對細節增強后的圖像進行x方向Sobel濾波
edge_y = imfilter(double(detail_enhanced), sobel_y, 'same', 'replicate'); % 對細節增強后的圖像進行y方向Sobel濾波
edge_magnitude = sqrt(edge_x.^2 + edge_y.^2); % 計算邊緣強度
edge_magnitude = uint8(255 * (edge_magnitude - min(edge_magnitude(:))) / (max(edge_magnitude(:)) - min(edge_magnitude(:)))); % 歸一化到0-255范圍% 4. 對比度受限的低對比度區域使用自適應直方圖均衡化提升對比度
adapthisteq_img = adapthisteq(detail_enhanced); % 對細節增強后的圖像進行自適應直方圖均衡化% 5. 用中值濾波去除噪聲點
final_img = medfilt2(adapthisteq_img, [3 3]); % 對自適應直方圖均衡化后的圖像進行中值濾波% 6. 分析比較不同階段的圖像效果
figure;
subplot(2, 3, 1);
imshow(ct_img_gray);
title('原圖');subplot(2, 3, 2);
imshow(filtered_img);
title('高斯濾波后');subplot(2, 3, 3);
imshow(detail_enhanced);
title('拉普拉斯細節增強后');subplot(2, 3, 4);
imshow(edge_magnitude);
title('Sobel邊緣檢測后');subplot(2, 3, 5);
imshow(adapthisteq_img);
title('自適應直方圖均衡化后');subplot(2, 3, 6);
imshow(final_img);
title('最終增強圖');
% 7. 將上述所有濾波方法進行優化組合獲得增強圖(已在上一步完成)
結果:
五、結語
? ? ? ?uu們!本章實驗的實驗結果到此就結束了,臨近春節,給自己放個假才讓我們更好的去面對嶄新的2025,uu們,下一章我們見!