ori_img=imread('C:\Program Files\MATLAB\R2013a\bin\Original_Images\DIP3E_Original_Images_CH03\Fig0343(a)(skeleton_orig).tif');
stretch_img=intrans(ori_img,'stretch',mean2(im2double(ori_img)),0.9);
w_lap=double([0,1,0;1,-4,1;0,1,0]); %edge_detect 边缘检测 图像锐化,拉普拉斯算子
ori_img=mat2gray(ori_img);
laplace_img=conv2(ori_img,w_lap,'same');
lap_plus_ori_img=mat2gray(ori_img-laplace_img); % 锐化图像
imshow(ori_img),title('ori_img');
figure,imshow(stretch_img),title('stretch img');
figure,imshow(laplace_img,[]),title('laplace img')
figure,imshow(lap_plus_ori_img,[]),title('lap plus ori img')
sobel_v=double([1,2,1;0,0,0;-1,-2,-1]); %Sobel operator 3x3 convolution kernels
% 垂直 Sobel_v kron([1,0,-1]',[1,2,1])
sob_v_img=conv2(ori_img,sobel_v,'same');
% sob_v_img=mat2gray(sob_v_img);
figure,imshow(sob_v_img,[]),title('sobel vetical img');
sobel_h=double([1,0,-1;2,0,-2;1,0,-1]); %Sobel operator 3x3 convolution kernels
sob_h_img=conv2(ori_img,sobel_h,'same');
% sob_h_img=mat2gray(sob_h_img);
figure,imshow(sob_h_img,[]),title('sobel Hor img');
sob_img=abs(sob_h_img)+abs(sob_v_img);
figure,imshow(sob_img,[]),title('sobel img') % 归一化
w_aver=double(ones(5)); % 使用5*5 均值滤波器平滑图像 ,均值滤波器是一种线性滤波器,中值滤波器为非线性,在处理医学图像时用线性。
sob_aver_img=conv2(sob_img,w_aver,'same'); % 平滑sobel 算子梯度处理后的图像
figure,imshow(sob_aver_img,[]),title('sob aver img') % 归一化
sob_aver_multiply_lap_plus_ori_img=mat2gray(sob_aver_img.*lap_plus_ori_img);
figure,imshow(sob_aver_multiply_lap_plus_ori_img,[]),title('sob aver multiply lap plus ori img'); % 归一化锐化图像与sobel 处理后的图像相乘
% 形成的非锐化掩蔽图像
ori_plus_sob_aver_multiply_lap_plus_ori_img=mat2gray(sob_aver_multiply_lap_plus_ori_img+ori_img);
figure,imshow(ori_plus_sob_aver_multiply_lap_plus_ori_img,[]),title('ori plus + sob aver multiply lap plus ori img');
gamma_img=intrans(ori_plus_sob_aver_multiply_lap_plus_ori_img,'gamma',0.4); % 幂律变换 gamma 变换
gamma_img=mat2gray(gamma_img);
figure,imshow(gamma_img,[]),title('gamma img');
第一为处理原图 截图 最后一张为gamma=0.4 时的处理结果 其他图片太多,这里就不上传了
具体分析,请参考 数字图像处理第三版 104 页
%sobel_h=double([-3,0,3;-10,0,10;-3,0,3]); %更准确
% sobel_v=doubel([-3,-10,-3;0,0,0;3,10,3]); %更准确
%由于sobel
%是一个近似算符,故总会有误差,这里可以用一个更准确的计算 具体细节请参考learning opencv by
%Bradski and Kaehler in the OpenCV reference (Scharr)