我试图在一组高维数据点(大约50维)上应用k-means,并且想知道是否有任何实现找到最佳簇数.
我记得在某处读取算法通常这样做的方式是使群集间距离最大化并且群集内距离最小化但我不记得我在哪里看到它.如果有人可以指出我讨论这个的任何资源,那将是很棒的.我目前正在使用SciPy进行k-means,但任何相关的库都可以.
如果有其他方法可以实现相同或更好的算法,请告诉我.
所以我试图在我的Java应用程序中编码一些动画gif文件.我一直在使用在线发现的一些类/算法,但似乎没有一个工作得很好.
现在我正在使用这个量化类将图像的颜色减少到256:http://www.java2s.com/Code/Java/2D-Graphics-GUI/Anefficientcolorquantizationalgorithm.htm
问题是,它似乎并不是非常"聪明".
如果我传入的图像超过256种颜色,它确实会减少颜色数,但效果不是很好.(红色变成蓝色等 - 非常明显的错误就像这样).
您可以推荐使用Java中的颜色量化的其他算法/库吗?
注意:我知道在此算法中使用的Neuquant:http://www.java2s.com/Code/Java/2D-Graphics-GUI/AnimatedGifEncoder.htm
它非常慢并产生"eh"结果(帧之间的颜色闪烁).
我想知道如何在opencv c ++中绘制HSV Mat的二维直方图.我当前试图显示它的代码失败了.我已经四处查看如何绘制直方图,我发现的所有直方图都是将它们绘制为独立的1d直方图.
这是我当前的输出,色调分箱数为30,饱和分箱数为32:

这是另一个输出,其中色调分箱数为7,饱和分箱数为5:

我希望它看起来更像是这里的结果
我也注意到每当我做cout << Hist.size它给我50x50.我理解这只是意味着数组的第一个维度是250的大小?
另外,如何将直方图从最高到最低(或反之亦然)值频率排序?这是我想要解决的另一个问题.
我目前的功能如下.
void Perform_Hist(Mat& MeanShift, Mat& Pyramid_Result, Mat& BackProj){
Mat HSV, Hist;
int histSize[] = {hbins, sbins};
int channels[] = {0, 1};
float hranges[] = {0, 180};
float sranges[] = {0, 256};
const float* ranges[] = {hranges, sranges};
cvtColor(MeanShift, HSV, CV_BGR2HSV);
Mat PyrGray = Pyramid_Result.clone();
calcHist(&HSV, 1, channels, Mat(), Hist, 2, histSize, ranges, true, false);
normalize(Hist, Hist, 0, 255, NORM_MINMAX, -1, Mat());
invert(Hist, Hist, 1);
calcBackProject(&PyrGray, 1, channels, Hist, …Run Code Online (Sandbox Code Playgroud) algorithm ×1
animated-gif ×1
data-mining ×1
gif ×1
histogram ×1
java ×1
k-means ×1
opencv ×1
python ×1
quantization ×1