使用函式edge的邊緣檢測:
常用的影像分割方法是邊緣檢測,這種方法是檢測亮度的不連續性,這樣的不連續是用一階和二階導數來檢測的,
首先,我們先介紹二階函式的梯度向量公式:

這個向量的幅值可以簡化為如下形式:通常使用梯度的幅值或近似值來作為“梯度”,

梯度向量的基本性質是:梯度向量指向(x,y)坐標處f的最大變化率方向,最大變化率處發生的角度是:

在影像處理工具箱中,可以使用函式edge來作為邊緣估計器,在本次實驗中,使用 sobel 模板進行梯度的運算,Sobel 模板能較好的抑制(平滑)噪聲,其模板形式如下圖:

代碼如下 :
clc %清除命令視窗的內容
close all %關閉所有的Figure視窗
clear all %清除作業空間的所有變數
origin_ima=imread('Fig.tif');
[Gradient_ima1,Binary_ima1]=Gradient_threshold(origin_ima,85);
mask_smooth =1/16*[1,2,1;2,4,2;1,2,1];
Smooth_ima = imfilter(origin_ima,mask_smooth);
[Gradient_ima2,Binary_ima2]=Gradient_threshold(Smooth_ima,85);
subplot(2,3,1);imshow(origin_ima);title('原影像');
subplot(2,3,2);imshow(Gradient_ima1);title('Sobel梯度圖');
subplot(2,3,3);imshow(Binary_ima1);title('二值影像,T=85');
subplot(2,3,4);imshow(Smooth_ima);title('平滑影像');
subplot(2,3,5);imshow(Gradient_ima2);title('Sobel梯度圖(經過平滑)');
subplot(2,3,6);imshow(Binary_ima2);title('二值影像(經過平滑,T=85)');
%% 梯度閾值化函式
function [G,Result] = Gradient_threshold(ima,T)
[m,n]=size(ima);
Result = zeros(m,n);
%Sobel模板
mask_x = [-1,-2,-1;0,0,0;1,2,1];
mask_y = [-1,0,1;-2,0,2;-1,0,1];
%計算梯度
Gx = imfilter(ima,mask_x);
Gy = imfilter(ima,mask_y);
G = abs(Gx)+abs(Gy);
%閾值處理
for x=1:m
for y=1:n
if(G(x,y)>T)
Result(x,y)=1;
end
end
end
end
本實驗是結合平滑和閾值的邊緣檢測,使用Sobel梯度,通過將每個梯度點與指定的閾值進行比較來輸出二值影像,二值影像可以通過對每個梯度點取值得到,其中閾值 T 為輸入引數,并且要求結合 3*3 模板的平滑運算和實驗上面的原算,并對影像進行處理,分割出影像中間的大血管區域,并將結果用二值圖表示,在實驗中需要對平滑運算方法和閱值 T 進行反復調整,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291386.html
標籤:其他
