颜色矩特征提取matlab,求matlab彩色图片的颜色特征提取算法的代码,和纹理特征提取的? 爱问知识人...

本文深入探讨了数字图像处理的关键技术和方法,重点介绍了基于颜色、纹理和形状的特征提取技术,并提供了颜色直方图法的具体实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实学数字图像处理,关键的不是源代码(和一般编程还是有区别的,这个是经验之谈,其实一般博导未必会编程,但是你和他说说你的方法,他一般都能切中要害),而是你能理解基于概念及适用场所。

基于颜色、纹理、形状都属于低层特征,这些你理解就够了,关键是对你的课题适合哪种方法来映射到高层语义上面,例如:识别物体轮廓,那可能形状就比较适合等。

我之所以写上面那段话,主要是我感觉你索取代码也不说明具体要求,也就是方向不明确。

如今颜色特征提取算法有很多,诸如颜色直方图、颜色矩、颜色集、颜色聚合向量、颜色相关图等,既然你没说,我就给个IEEE CSVT 2001的一篇关于颜色直方图法的论文(源码版权归作者所有):

function colorhist = colorhist(rgb)

% CBIR_colorhist() --- color histogram calculation

% input: MxNx3 image data, in RGB

% output: 1x256 colorhistogram == (HxSxV = 16x4x4)

% as the MPEG-7 generic color histogram descriptor

% [Ref] Manjunath, B。

S。; Ohm, J。-R。; Vasudevan, V。V。; Yamada, A。, "Color and texture descriptors"

% IEEE Trans。 CSVT, Volume: 11 Issue: 6 , Page(s): 703 -715, June 2001 (section III。

B)

% check input

if size(rgb,3)~=3

error('3 components is needed for histogram');

end

% globals

H_BITS = 4; S_BITS = 2; V_BITS = 2;

%rgb2hsv可用rgb2hsi代替,见你以前的提问。

hsv = uint8(255*rgb2hsv(rgb));

imgsize = size(hsv);

% get rid of irrelevant boundaries

i0=round(0。

05*imgsize(1)); i1=round(0。95*imgsize(1));

j0=round(0。05*imgsize(2)); j1=round(0。95*imgsize(2));

hsv = hsv(i0:i1, j0:j1, :);

% histogram

for i = 1 : 2^H_BITS

for j = 1 : 2^S_BITS

for k = 1 : 2^V_BITS

colorhist(i,j,k) = sum(sum( 。

。。

bitshift(hsv(:,:,1),-(8-H_BITS))==i-1 &。。。

bitshift(hsv(:,:,2),-(8-S_BITS))==j-1 &。。。

bitshift(hsv(:,:,3),-(8-V_BITS))==k-1 ));

end

end

end

colorhist = reshape(colorhist, 1, 2^(H_BITS S_BITS V_BITS));

% normalize

colorhist = colorhist/sum(colorhist);

%基于纹理特征提取灰度共生矩阵用于纹理判断

% Calculates cooccurrence matrix

% for a given direction and distance

%

% out = cooccurrence (input, dir, dist, symmetric);

%

% INPUT:

% input: input matrix of any size

%

% dir: direction of evaluation

% "dir" value Angle

% 0 0

% 1 -45

% 2 -90

% 3 -135

% 4 -180

% 5 135

% 6 90

% 7 45

%

% dist: distance between pixels

%

% symmetric: 1 for symmetric version

% 0 for non-symmetric version

%

% eg: out = cooccurrence (input, 0, 1, 1);

% Author: Baran Aydogan (15。

07。2006)

% RGI, Tampere University of Technology

% baran。aydogan@tut。

fi

function out = cooccurrence (input, dir, dist, symmetric);

input = round(input);

[r c] = size(input);

min_intensity = min(min(input));

max_intensity = max(max(input));

out = zeros(max_intensity-min_intensity 1);

if (dir == 0)

dir_x = 0; dir_y = 1;

end

if (dir == 1)

dir_x = 1; dir_y = 1;

end

if (dir == 2)

dir_x = 1; dir_y = 0;

end

if (dir == 3)

dir_x = 1; dir_y = -1;

end

if (dir == 4)

dir_x = 0; dir_y = -1;

end

if (dir == 5)

dir_x = -1; dir_y = -1;

end

if (dir == 6)

dir_x = -1; dir_y = 0;

end

if (dir == 7)

dir_x = -1; dir_y = 1;

end

dir_x = dir_x*dist;

dir_y = dir_y*dist;

out_ind_x = 0;

out_ind_y = 0;

for intensity1 = min_intensity:max_intensity

out_ind_x = out_ind_x 1;

out_ind_y = 0;

[ind_x1 ind_y1] = find (input == intensity1);

ind_x1 = ind_x1 dir_x;

ind_y1 = ind_y1 dir_y;

for intensity2 = min_intensity:max_intensity

out_ind_y = out_ind_y 1;

[ind_x2 ind_y2] = find (input == intensity2);

count = 0;

for i = 1:size(ind_x1,1)

for j = 1:size(ind_x2,1)

if ( (ind_x1(i) == ind_x2(j)) && (ind_y1(i) == ind_y2(j)) )

count = count 1;

end

end

end

out(out_ind_x, out_ind_y) = count;

end

end

if (symmetric)

if (dir > 4)

dir = dir 4;

else

dir = mod(dir,4);

end

out = out cooccurrence (input, dir, dist, 0);

end。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值