圖像銳化 (一)

圖像銳化的目的是加強圖像中景物的邊緣和輪廓,突出圖像中的細節或增強被模糊了的細節。

方法一:一階微分算子

1. 梯度算子

clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
subplot(131),imshow(a),title('orgin');
[h,w]=size(a);

%----- 梯度算子 -----%
edgeImage=zeros(h,w);
for x=1:w-1
    for y=1:h-1
        edgeImage(y,x)=abs(a(y,x+1)-a(y,x))+abs(a(y+1,x)-a(y,x));
    end
end
subplot(132),imshow(edgeImage),title('edgeImage');
afterImage=edgeImage+a;
subplot(133),imshow(afterImage),title('afterImage');
梯度算子
Caption

2. Robert 算子

clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
figure,subplot(231),imshow(a),title('orgin');
[h,w]=size(a);

%----- Robert算子 -----%
RobertImage=zeros(h,w);
for x=1:w-1
    for y=1:h-1
        RobertImage(y,x)=abs(a(y+1,x+1)-a(y,x))+abs(a(y+1,x)-a(y,x+1));
    end
end
subplot(232),imshow(RobertImage),title('RobertImage1');
afterRobertImage=RobertImage+a;
subplot(233),imshow(afterRobertImage),title('afterRobertImage1');

H1=[1 0;0 -1];
H2=[0 1;-1 0];
edgeImage=abs(imfilter(a,H1))+abs(imfilter(a,H2));
subplot(234),imshow(edgeImage),title('RobertImage2');
after=edgeImage+a;
subplot(235),imshow(after),title('afterRobertImage2');

BW=edge(a,'roberts'); %edge:對a採用roberts算子進行邊緣檢測,返回二值圖像BW 1表示邊緣 0表示其他
subplot(236),imshow(BW),title('BW');

3. Sobels 算子

sobel 算子引入平均元素,對圖像中的隨機噪聲有一定的平滑作用;相隔兩行或者兩列求差分,故邊緣兩側的元素得到了增強,邊緣顯得粗而亮

可以通過旋轉將模板擴展爲8個

clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
figure,subplot(231),imshow(a),title('orgin');
[h,w]=size(a);

%----- sobel 算子 -----%
H1=[-1 -2 -1;0 0 0; 1 2 1];
H2=[-1 0 1;-2 0 2;-1 0 1];
H3=[0 -1 -2;1 0 -1;2 1 0];
img=zeros(h,w);
imgH=abs(imfilter(a,H1));
imgHW=abs(imfilter(a,H1))+abs(imfilter(a,H2));
imgHWS=abs(imfilter(a,H1))+abs(imfilter(a,H2))+abs(imfilter(a,H3));
afterimgH=imgH+a;
afterimgHW=imgHW+a;
afterimgHWS=imgHWS+a;
subplot(232),imshow(imgH),title('Sobel_H');
subplot(233),imshow(imgHW),title('Sobel_HW');
subplot(234),imshow(afterimgH),title('afterSobel_H');
subplot(235),imshow(afterimgHW),title('afterSobel_HW');
subplot(236),imshow(afterimgHWS),title('afterSobel_HWS');

4. Prewitt 算子

clc
clear
a=imread('test.jpg');
a=rgb2gray(a);
a=im2double(a);
figure,subplot(231),imshow(a),title('orgin');
[h,w]=size(a);

%----- Prewitt 算子 -----%
H1=[-1 -1 -1;0 0 0; 1 1 1];
H2=[-1 0 1;-1 0 1;-1 0 1];
H3=[0 -1 -1;1 0 -1;1 1 0];
img=zeros(h,w);
imgH=abs(imfilter(a,H1));
imgHW=abs(imfilter(a,H1))+abs(imfilter(a,H2));
imgHWS=abs(imfilter(a,H1))+abs(imfilter(a,H2))+abs(imfilter(a,H3));
afterimgH=imgH+a;
afterimgHW=imgHW+a;
afterimgHWS=imgHWS+a;
subplot(232),imshow(imgH),title('Prewitt_H');
subplot(233),imshow(imgHW),title('Prewitt_HW');
subplot(234),imshow(afterimgH),title('afterPrewitt_H');
subplot(235),imshow(afterimgHW),title('afterPrewitt_HW');
subplot(236),imshow(afterimgHWS),title('afterPrewitt_HWS');

 

 

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