【數字圖像處理】MATLAB實現圖像的銳化

圖像銳化處理的MATLAB實現


1、關於一階微分銳化

1)單方向一階銳化

👉 水平方向的一階銳化

代碼實現:

% 水平方向一階微分銳化

im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
im = double(im);
H = [1 2 1;0 0 0; -1 -2 -1];
im1 = filter2(H,im); % filter2 - 二維數字濾波器 
figure,imshow(im1);title('直接濾波所得圖像');
figure,imshow(uint8(im1+im));title('直接濾波併疊加原圖所得圖像');

maxV = max(max(im1));
minV = min(min(im1));

im2 = (im1-minV)*(255/(maxV-minV));
figure,imshow(uint8(im2));title('濾波結果歸一化所得圖像');

im3 = abs(im1);
figure,imshow(uint8(im3));title('濾波結果取絕對值所得圖像');

代碼執行結果:
在這裏插入圖片描述 在這裏插入圖片描述

👉 垂直方向的一階銳化

代碼實現:

% 垂直方向一階微分銳化

im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
im = double(im);
H = [1 0 -1;2 0 -2; 1 0 -1];
im1 = filter2(H,im); % filter2 - 二維數字濾波器 
figure,imshow(im1);title('直接濾波所得圖像');
figure,imshow(uint8(im1+im));title('直接濾波併疊加原圖所得圖像');

maxV = max(max(im1));
minV = min(min(im1));

im2 = (im1-minV)*(255/(maxV-minV));
figure,imshow(uint8(im2));title('濾波結果歸一化所得圖像');

im3 = abs(im1);
figure,imshow(uint8(im3));title('濾波結果取絕對值所得圖像');

代碼執行結果:
在這裏插入圖片描述 在這裏插入圖片描述

2)無方向一階銳化

👉 交叉微分銳化

代碼實現:

% 交叉微分算法(Roberts算法)
% g( i, j)= |f(i+1,j+1)-f(i,j)|+ |f(i+1,j)-f(i,j+1)|

% 輸入原始圖像
im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
f = double(im);

[h,l,c] = size(f);
g = zeros(h,l);
for i=1:h-1
    for j=1:l-1
        % 交叉微分
        g(i,j) = abs(f(i+1,j+1)-f(i,j)) + abs(f(i+1,j)-f(i,j+1));
    end
end
im2 = uint8(g);
figure,imshow(im2);title('交叉微分/Roberts銳化所得的圖像');
figure,imshow(uint8(g+f));title('交叉微分/Roberts銳化併疊加原圖所得的圖像');

代碼執行結果:
在這裏插入圖片描述

👉 Sobel銳化

代碼實現:

% Sobel銳化   
% g(i,j)=[dx(i,j)^2+dy(i,j)^2]^(1/2);
% dx = [-1 -2 -1;0 0 0;1 2 1]; dy = [-1 0 1;-2 0 2;-1 0 1];

% 輸入原始圖像
im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
im = double(im);

H1 = [-1 -2 -1;0 0 0;1 2 1]; dx = filter2(H1,im);
H2 = [-1 0 1;-2 0 2;-1 0 1]; dy = filter2(H2,im);

im2 = sqrt(dx.^2 + dy.^2); % .^2:矩陣中的每個元素都求平方
figure,imshow(uint8(im2));title('Sobel銳化所得的圖像');
im3 = im + sqrt(dx.^2 + dy.^2)*0.1;
figure,imshow(uint8(im3));title('Sobel銳化併疊加原圖所得的圖像');

代碼執行結果:
在這裏插入圖片描述

👉 Priwitt銳化

代碼實現:

% Priwitt銳化算法
% g(i,j)=[dx(i,j)^2+dy(i,j)^2]^(1/2);
% dx = [-1 -1 -1;0 0 0;1 1 1]; dy = [-1 0 1;-1 0 1;-1 0 1];

% 輸入原始圖像
im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
im = double(im);

H1 = [-1 -1 -1;0 0 0;1 1 1]; dx = filter2(H1,im);
H2 = [-1 0 1;-1 0 1;-1 0 1]; dy = filter2(H2,im);

im2 = sqrt(dx.^2 + dy.^2); % .^2:矩陣中的每個元素都求平方
figure,imshow(uint8(im2));title('Priwitt銳化所得的圖像');
im3 = im + sqrt(dx.^2 + dy.^2)*0.1;
figure,imshow(uint8(im3));title('Priwitt銳化併疊加原圖所得的圖像');

代碼執行結果:
在這裏插入圖片描述


2、關於二階微分銳化

👉 Laplacian 算法

代碼實現:

% (拉普拉斯)Laplacian銳化算法

% 輸入原始圖像
im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
im = double(im);

H1 = [0 -1 0;-1 4 -1;0 -1 0]; im_filter1 = filter2(H1,im);

im2_1 = im_filter1 + im;figure,imshow(uint8(im2_1));title('Laplacian銳化—H1疊加原圖所得的圖像');

maxV = max(max(im_filter1));minV = min(min(im_filter1));

delta = 0;
if(minV<0)
    delta = abs(minV);
end
im1 = im_filter1 + delta;
figure,imshow(uint8(im1));title('Laplacian銳化圖像');

代碼執行結果:
在這裏插入圖片描述

👉 Wallis算法

代碼實現:

% Wallis銳化算法

% 輸入原始圖像
im = imread('img\Grayblur6.png');imshow(im);title('原始圖像');
im0 = double(im);
im = 46*log(im0+1);

H = [0 -1 0;-1 4 -1;0 -1 0];imfilter = filter2(H,im);

figure,imshow(uint8(imfilter+im0));title('Wallis銳化疊加原圖所得的圖像');

minV = min(min(imfilter));
delta = 0;
if(minV<0)
    delta = abs(minV);
end
im1 = imfilter + delta;
figure,imshow(uint8(im1));title('Wallis銳化圖像');

代碼執行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章