我有一个非常bizzare的情况:我有一个函数在MATLAB调用三个其他主要功能,并为我产生两个数字。该函数读入输入的jpeg图像,裁剪,使用kmeans聚类对其进行分割,并在屏幕上输出2个数字 - 原始图像和聚类图像,并显示聚类中心。以下是在MATLAB函数:不同的函数返回从命令行和函数内
function [textured_avg_x photo_avg_x] = process_database_images()
clear all
warning off %#ok
type_num_max = 3; % type is 1='texture', 2='graph', or 3='photo'
type_num_max = 1;
img_max_num_photo = 100; % 400 photo images
img_max_num_other = 100; % 100 textured, and graph images
for type_num = 1:2:type_num_max
if(type_num == 3)
img_num_max = img_max_num_photo;
else
img_num_max = img_max_num_other;
end
img_num_max = 1;
for img_num = 1:img_num_max
[type img] = load_image(type_num, img_num);
%img = imread('..\images\445.jpg');
img = crop_image(img);
[IDX k block_bounds features] = segment_image(img);
end
end
end
segment_image
第一显示我已传递中,执行k均值聚类彩色图像的功能,并且输出该图像集群。当我在一个特定的图像上运行这个函数时,我得到3个集群(这不是我期望得到的)。
当我运行从MATLAB命令提示以下命令:
>> img = imread('..\images\texture\1.jpg');
>> img = crop_image(img);
>> segment_image(img);
然后由segment_image
显示的第一图像是相同的,当我运行该功能的(所以我知道聚类完成在同一张图片上),但簇的数量是16(这是我所期望的)。实际上,当我在我的整个图像数据库上运行我的process_database_images()
函数时,每个图像都被评估为有3个群集(这是一个问题),而当我单独测试一些图像时,我得到的范围是12- 16个集群,这是我所喜欢和期望的。
为什么会有这样的差异?我的process_database_images()函数中有一些语法错误吗?如果我需要更多代码(即segment_images函数或crop_image函数),请告诉我。
谢谢。
编辑:
我发现问题的根源。在我的load_image
函数中,在我呼叫img = imread(filename)
之后,我将图像转换为double:`img = im2double(img);'。当我评论这条线时,我会得到期望的结果。任何人都知道为什么会这样? (也是因为我找到了问题,所以我可以'关闭'这个问题)。
尝试了它 - 仍然从命令行得到期望的结果 – Myx 2010-05-04 19:38:37