灰度共生矩阵GLCM、图像均值、方差、熵、Percentile mean and SD、Kurtosis、Skewness
灰度共生矩阵GLCM、图像均值、方差、熵、Percentile mean and SD、Kurtosis、Skewness等特征:function feature = feature_extracted2( im2,x,y )
= size(im2);
% Gray-level histogram features
% = imhist(im2);
Nt = h*w;
% prob = n_count./Nt; % Pi概率值
% x_value = prob;
% x_value = im2(:);
for i=1:length(x)
x_value(i) = im2(x(i),y(i));
end
mean1 = mean(x_value);% 均值
SD1 = std(x_value); % 方差
% Percentile mean and SD
x_value1 = sort(x_value,'ascend');
mean_beta_10 = mean( x_value1(floor(0.90*length(x_value1)):end ) );
mean_beta_25 = mean( x_value1(floor(0.75*length(x_value1)):end ) );
mean_beta_50 = mean( x_value1(floor(0.50*length(x_value1)):end ) );
SD_beta_10 = std( x_value1(floor(0.90*length(x_value1)):end ) );
SD_beta_25 = std( x_value1(floor(0.75*length(x_value1)):end ) );
SD_beta_50 = std( x_value1(floor(0.50*length(x_value1)):end ) );
% Kurtosis
% kurtosis1 = sum((x_value-mean1).^4)/Nt ./ sqrt( sum((x_value-mean1).^2)./Nt ).^4;
% kurtosis1 = sum((x_value-mean1).^4) ./ sqrt( sum((x_value-mean1).^2) ).^4;
% Skewness
% skewness1 = sum((x_value-mean1).^3)/Nt ./ sqrt( sum((x_value-mean1).^2)./Nt ).^3;
% skewness1 = sum((x_value-mean1).^3) ./ sqrt( sum((x_value-mean1).^2) ).^3;
kurtosis1 = kurtosis(double(x_value));
skewness1 = skewness(double(x_value));
% Gray-Level Co-Occurrence Matrix(GLCM)
% Angle OFFSET
% ----- ------
% 0
% 45 [-D D]
% 90 [-D 0]
% 135 [-D -D]
glcms_0 = graycomatrix(im2, 'offset', ); % Angle = 0
glcms_45 = graycomatrix(im2, 'offset', [-1 1]); % Angle = 45
glcms_90 = graycomatrix(im2, 'offset', [-1 0]); % Angle = 90
glcms_135 = graycomatrix(im2, 'offset', [-1 -1]); % Angle = 135
stats_0 = graycoprops(glcms_0, 'all');
stats_45 = graycoprops(glcms_45, 'all');
stats_90 = graycoprops(glcms_90, 'all');
stats_135 = graycoprops(glcms_135, 'all');
Contrast_0 = stats_0.Contrast;
Correlation_0 = stats_0.Correlation;
Energy_0 = stats_0.Energy;
Homogeneity_0 = stats_0.Homogeneity;
% 求解熵
tGLCM = glcms_0./sum(glcms_0(:));
entropy_0 = -sum(sum(tGLCM.*log(tGLCM+eps)));
Contrast_45 = stats_45.Contrast;
Correlation_45 = stats_45.Correlation;
Energy_45 = stats_45.Energy;
Homogeneity_45 = stats_45.Homogeneity;
% 求解熵
tGLCM = glcms_45./sum(glcms_45(:));
entropy_45 = -sum(sum(tGLCM.*log(tGLCM+eps)));
Contrast_90 = stats_90.Contrast;
Correlation_90 = stats_90.Correlation;
Energy_90 = stats_90.Energy;
Homogeneity_90 = stats_90.Homogeneity;
% 求解熵
tGLCM = glcms_90./sum(glcms_90(:));
entropy_90 = -sum(sum(tGLCM.*log(tGLCM+eps)));
Contrast_135 = stats_135.Contrast;
Correlation_135 = stats_135.Correlation;
Energy_135 = stats_135.Energy;
Homogeneity_135 = stats_135.Homogeneity;
% 求解熵
tGLCM = glcms_135./sum(glcms_135(:));
entropy_135 = -sum(sum(tGLCM.*log(tGLCM+eps)));
feature = [mean1,SD1,mean_beta_10,mean_beta_25,mean_beta_50,SD_beta_10,SD_beta_25,SD_beta_50,...
kurtosis1,skewness1,...
Contrast_0,Correlation_0,Energy_0,Homogeneity_0,entropy_0...
Contrast_45,Correlation_45,Energy_45,Homogeneity_45,entropy_45...
Contrast_90,Correlation_90,Energy_90,Homogeneity_90,entropy_90...
Contrast_135,Correlation_135,Energy_135,Homogeneity_135,entropy_135];图像滤波函数:
function im5 = freqfilter2(im1,delta)
% 滤波器
% input:
% M,N:频域滤波器的尺寸
% delta:带阻滤波器的截止频率
% output:
% H:M x N的矩阵,表示频域滤波器矩阵,数据类型为double,
if ~isa(im1,'double')
im1 = double(im1)/255;
end
% im2 = fft2(im1); % 傅里叶变换
% im3 = fftshift(im2);% 中心化
% = size(im3);
for i = 1:3
for j = 1:3
h(i,j) = -1/3.1415926/(delta.^4).*(1-(i.^2+j.^2)/2/delta/delta).*exp( -((i.^2+j.^2)./2/delta/delta) );
end
end
im5 = conv2(im1,h,'same');
% result = ifftshift(result); % 反中心化
% im4 = ifft2(result); % 反变换
% % im5 = im2uint8(real(im4)); % 滤波图像
% im5 = abs(real(im4)); % 滤波图像
minV = min(min(im5));
maxV = max(max(im5));
im5 = 255.0*(im5-minV)./(maxV-minV);
end图像特征求解,主程序:
clc,clear,close all
warning off
im = dicomread('例图2.dcm');
im = mat2gray(im);
% figure(1),imshow(im)
% 扣出感兴趣区域
bw = im>0;
% figure(2),imshow(bw)
= find(bw==1);
im1 = im(min(x):max(x),min(y):max(y));
bw = im2bw(im1);
= find(bw==1);
minV = min(min(im1));
maxV = max(max(im1));
im1 = 255.0*(im1-minV)./(maxV-minV);
% im1 = im2uint8(im1);
figure(3),imshow(im1,[])
= size(im1);
delta = ;
feature_total = [];
for i = 1:length(delta)
if isequal(delta(i),0)
im2 = im1;
else
% 图像滤波
im2 = freqfilter2(im1,delta(i));
end
% 特征求解
feature = feature_extracted2( im2,x,y );
figure,imshow(im2,[])
feature2(i,:) = feature;
feature_total = ;
end
%% 特征绘图
figure(10),plot(feature_total,'ro-','linewidth',2);
grid on
参考资料:【1】结肠癌 淋巴转移 nomogram JCO:http://pan.baidu.com/s/1cgYzO6
【2】Development and validation of a radiomics nomogram for preoperative predicting lymph node metastasis in colorectal cancer :http://pan.baidu.com/s/1jHDBSEU
【3】图像:http://pan.baidu.com/s/1nuXmiXr
页:
[1]