精华内容
下载资源
问答
  • 01-Kmeans图像像素聚类
    2018-11-18 15:42:45

    KMeans图像像素点聚类算法实现python:

         https://blog.csdn.net/sunmc1204953974/article/details/50052099?utm_source=blogxgwz3

    更多相关内容
  • Python DBSCAN聚类算法 使用DBSCAN算法的图像像素聚类
  • 结合卷积神经网络和超像素聚类的细胞图像分割方法.pdf
  • 基于超像素聚类的移动机器人远程可穿越区域检测
  • 图像分割是图像处理到分析的关键步骤,阈值分割方法因其计算简单而被广泛应用,聚类算法也因其准确性成为图像分割领域中一类极其重要的算法。选取几种经典阈值分割算法和几种聚类算法对几幅毫米波图像进行分割实验,...
  • 这是一个很好的演示,展示了均值偏移思想如何用于图像像素聚类
  • JS实现图像像素聚类

    2021-10-15 19:11:02
    在此次实践中,对于Kmeans聚类算法交互式改变簇数的时候,我发现我的button按钮必须点击两次才行,目前还未找出原因。 说明:对于图像的画布显示用Canvas,柱状图、饼图采用的是Echarts模板展示。 需要连接python ...

    在此次实践中,对于Kmeans聚类算法交互式改变簇数的时候,我发现我的button按钮必须点击两次才行,目前还未找出原因。
    说明:对于图像的画布显示用Canvas,柱状图、饼图采用的是Echarts模板展示。
    需要连接python 服务器,管理员cmd进入当前目录,采用python -m http.server 80000方式建立,后直接在浏览器中输入http://localhost:8000即可。

    <!DOCTYPE html>
    <!--
    1.此次实践实现图片显示以及图片的聚类柱状图饼形图显示。
    2.实现图片选择的交互式,仅支持打开JPG图像
    3.实现柱状图、条形图切换
    4.可视化聚类中心颜色即是柱状图或者饼状图颜色,数量,中心RGB具体值显示需鼠标接触显示
    5.实现交互式改变kmeans的簇数,簇数不能为1,实践中没有进行非法处理,不然会出现问题(该过程加载缓慢)最好点击两次
    -->
    <html>
    <head>
    	<meta charset="utf-8">
    	<title>Lab01</title>
    </head>
    <body>
    <!--设置div绝对位置-->
    <!--border-style:solid;
    	border-color:blue;-->
    <style type = "text/css"> 
    .div2{
    	height:600px;
    	background-color:white;
    	position:absolute;
    	top:20px;
    	left:710px;
    	right:5%;
    }
    #div4bm{
    	height:100px;
    	width:400px;
    	background-color:white;
    	position:absolute;
    	top:470px;
    	left:590px;
      }
      #mybutton{
      margin-left:50px;
    }
    #myform{
    	background-color:white;
    	margin-left:40%;
    }
    #container{
    	height:70%;
    	width:100%;
    }
    </style>
    
    <script type="text/javascript" src="echarts.min.js"></script>
    <!--script type="text/javascript" src="jquery-1.8.2.min.js"></script-->
    <!-- 
    	一个画布
    	画布相关代码参考:https://www.w3school.com.cn/html5/html_5_canvas.asp
    -->
    <canvas id="myCanvas" width="690" height="457" style="border:1px solid #c3c3c3;">
    Your browser does not support the canvas element.
    </canvas>
    
    <div id="div4bm" >
      <!--input[button] 触发 file click事件-->
      <input type="button" value="选择文件" id="mybutton" class="mybtn" onclick="Id('file').click();" />
      <!--file 隐藏起来 触发onchange事件-->
      <input type="file" name="file" accept="image/jpg" id="file" onchange="changeToop(this);" style="display:none;" />
     </div>
    <div class = "div2">
    <div id="container" ></div>
    <!--设置Radio按钮,实现柱状图与饼状图的选择-->
    <form action="" method="get" id = "myform"> 
    	<label>输入簇数:<input name="k_means" type="text" id="myks" style="width:30px;height:20px"/></label>
    	<label><input name="get" type="button" value="提交(点两次)" onclick = "change_k()"/></label><br/>
    	<label><input name="charts" type="radio" id="0" onclick = "changechart();" checked/>柱状图 </label> 
    	<label><input name="charts" type="radio" id="1" onclick = "changechart();"/>饼状图</label> 
      </form>
    </div>
    
    <script type="text/javascript">
    
    	//响应kmeans簇数k的改变
    	function change_k()
    	{
    		myks = document.getElementById("myks").value;
    		myload();
    	}
    
    	//响应展示图Radio按钮改变事件函数
    	function changechart(){
    		if(document.getElementById("0").checked){ //柱状图
    			var dom = document.getElementById("container");
    			var myChart = echarts.init(dom);
    			var app = {};
    			var option;
    			option = {
    				tooltip: {
    					trigger: 'axis',
    					axisPointer: {
    					type: 'shadow'
    					}
    				},
    				xAxis: [{
    					type: 'category',
    					data: colorList,
    					show:true,
    					axisTick: {
    						alignWithLabel: true
    					},
    					axisLabel:{
    						interval:(index,value) =>{return false}//设置X轴数据不显示
    					}
    				}],
    				yAxis: [{
    					type: 'value',
    					show:true
    				}],
    				grid:{
    					containLabel:true
    				},
    			
    				series: [{
    					name: '数量',
    					data: mycnt,
    					type: 'bar',
    					barWidth: '50%',
    					itemStyle: {   
    	        //每个柱子的颜色即为colorList数组里的每一项,如果柱子数目多于colorList的长度,则柱子颜色循环使用该数组
    						color: function (params){
    							//console.log(params.dataIndex);
    							//console.log(colorList[params.dataIndex]);
    							return colorList[params.dataIndex];
    						}
    					}
    				}]
    			};
    			if (option && typeof option === 'object') {
    				myChart.setOption(option);
    			}
    		}
    		else{									//饼状图
    			var dom = document.getElementById("container");
    			var myChart = echarts.init(dom);
    			var app = {};
    			var option;
    			var piedata = new Array();
    			for(var i = 0; i < ks ; i++){
    				piedata.push({value:mycnt[i],name:colorList[i],itemStyle:{color:colorList[i]}});
    			}
    			piedata.sort(function (a, b) {
    				return a.value - b.value;
    			 });
    		
    			option = {
    				xAxis: [{show:false}],
    				yAxis: [{show:false}],
    				tooltip: {
    					trigger: 'item'
    				},
    				series: [{
    					name:"",
    					labelLine: {show:false},
    					label:{show:false},
    					type: 'pie',
    					radius: '55%',
    					center: ['50%', '50%'],
    					data: piedata,
    					roseType: 'radius',
    					animationType: 'scale',
    					animationEasing: 'elasticOut',
    					animationDelay: function (idx) {
    						return Math.random() * 200;
    					}
    				}]
    			};
    			if (option && typeof option === 'object') {
    				myChart.setOption(option);
    			}
    		}
    	}
    	
    	//通过JQuery方法响应radio事件
    	/*$('input[type=radio][name=charts]').change(function () {
        // 获取input radio选中值,方法一
        var myvalue = $(this).val();
    	if(myvalue!=check)
    		changechart(myvalue);
    	check = myvalue;
    	console.log(check);
    	});*/
    	
    	//加载打开图片并且进行聚类分析
    	function myload(){
    		if(ks == myks)
    		{
    		var context = document.getElementById('myCanvas').getContext('2d');
    		context.drawImage(img, 0, 0);
    		// data中保存了图片所有像素的颜色信息,每个像素的RGBA信息占数组中4位
    		// RGBA为像素的红色、绿色、蓝色、透明度四个分量	
    		//但此次聚类我分析的只是颜色,故聚类RGB
    		 var data = context.getImageData(0, 0, 690, 457).data;
    		}
    		else
    		{
    			ks = myks;
    			colorList.length = 0;
    		}
    		//console.log(data);
    		var cnt = 690*457; //图片中总的像素个数
    		
    		var point = [];//创建数组保留像素的RGB值
    		var layout = [];//记录每个簇的点的在point中的标号,就是分在哪个簇
    		var k = 0;//记录data索引
    
    		for(var i = 0; i < cnt; i++)
    		{
    			layout[i] =[];
    			layout[i][0] = 0;
    			layout[i][1] = 200000;
    			point[i] = [];
    			point[i][0] = data[k];
    			k++;
    			point[i][1] = data[k];
    			k++;
    			point[i][2] = data[k];
    			k++;
    			//point[i][3] = data[k];
    			k++; //透明度A直接跳过
    		}
    			
    		//kmeans具体算法
    		//01.选择初始化的点(随便,或者函数点) 利用随机函数
    		var centroids = [];
    		console.log(ks);
    		for (var i = 0;i < ks; i ++)
    		{
    			centroids[i] = [];
    			var index = Math.round(Math.random()*(cnt));
    			centroids[i][0] = point[index][0];
    			centroids[i][1] = point[index][1];
    			centroids[i][2] = point[index][2];
    			//centroids[i][3] = point[i][3];
    		}
    		
    		var change = true;//标志簇是否改变
    		while (change==true)
    		{
    			change = false;
    			for ( var i = 0; i < cnt; i++)
    			{
    				var mindist =  200000;
    				var minindex = 0;
    				//02.每个点找到离得最近的簇
    				for (var j = 0; j < ks; j++)
    				{
    					var dis = Math.sqrt(Math.pow(point[i][0]-centroids[j][0],2)+Math.pow(point[i][1]-centroids[j][1],2)+
    								Math.pow(point[i][2]-centroids[j][2],2));
    					if (dis < mindist)
    					{
    						mindist = dis;
    						minindex = j;
    					}
    				}
    				if (layout[i][0] != minindex)
    				{
    					change = true;
    					layout[i][0] = minindex;
    					layout[i][1] = mindist;
    				}
    				
    			}
    			console.log(change);
    			//03.更新簇
    			var mysum = [];
    			for (var i = 0; i < ks;i++)
    			{
    				mysum[i] = [];
    				mysum[i][0] = 0;
    				mysum[i][1] = 0;
    				mysum[i][2] = 0;
    				//mysum[i][3] = 0;
    				mycnt[i] = 0;
    			} 
    			for ( var i = 0; i < cnt;i++)
    			{
    				for(var j = 0; j< ks; j++)
    				{
    					if(layout[i][0] == j)
    					{
    						mysum[j][0] += point[i][0];
    						mysum[j][1] += point[i][1];
    						mysum[j][2] += point[i][2];
    						//mysum[j][3] += point[i][3];
    						mycnt[j]++;
    						break;
    					}
    				}
    			}
    			for(var i = 0; i < ks; i ++)//对于每个坐标每次都需要四舍五入取整数
    			{
    				centroids[i][0] = Math.round(mysum[i][0]/mycnt[i]);
    				centroids[i][1] = Math.round(mysum[i][1]/mycnt[i]);
    				centroids[i][2] = Math.round(mysum[i][2]/mycnt[i]);
    				//centroids[i][3] = Math.round(mysum[i][3]/mycnt[i]);
    			}
    			
    		}
    		
    		
    		//记录颜色数组
    		for (var i = 0; i < ks; i++)
    		{
    			colorList[i] = 'rgb('+centroids[i][0]+','+centroids[i][1]+','+centroids[i][2]+')';
    			console.log(colorList[i]);
    		}
    		//聚类图显示
    		centroids.length=0;
    		point.length = 0;
    		layout.length=0;
    		mysum.length = 0;
    		data.length = 0;
    		changechart();
    	}
    
    	function Id(id){
    		return document.getElementById(id);
    	}
    	function changeToop(){
    		var file = document.getElementById("file");
    		if(file.value==''){
    			//设置默认图片
    			img.src='images/01.jpg';
    		}
    		else{
    			preImg("file");
    		}
    	}
    	//得到打开图片地址
    	function getFileUrl(fileId) {
    		var url;
    		var file = document.getElementById(fileId);
    		var agent = navigator.userAgent;
    		if (agent.indexOf("MSIE")>=1) {
    			url = file.value;
    		} 
    		else if(agent.indexOf("Firefox")>0) {
    			url = window.URL.createObjectURL(file.files.item(0));
    		} 
    		else if(agent.indexOf("Chrome")>0) {
    		  url = window.URL.createObjectURL(file.files.item(0));
    		}
    		console.log(url);
    		return url;
    	}
    	//读取图片后预览
    	function preImg(fileId) {
    		img.src = getFileUrl(fileId);
    		
    		console.log(img.src);
    		img.onload=function(){
    			myload();
    		};
    		myload();
    	}
    	//myload();
    	//初次加载图片
    	var img = new Image();
    	img.onload=function(){
    		myload();
    	};
    	var colorList = [];//记录簇的颜色
    	var mycnt = [];//记录某种簇的个数
    	var ks = 4; //设置kmeans的簇数 如果画出的图某些位置为空,说明初始点选择出现问题
    	var myks = 4; //设置输入框的值,只有输入框的值与k相等才需要重新绘图,否则,改变簇数即可
    	//给予图像初始化地址,刚开始展示该图
    	img.src='images/01.jpg';
    </script>
    
    </body>
    </html>
    

    实践效果:
    在这里插入图片描述

    展开全文
  • 一种新的SAR图像目标检测像素聚类算法.pdf
  • OpenCV and Python K-Means Color Clustering(图像像素聚类) 英文原文 translator:aaron-clark-aic 简单讲,聚类就是将一组数据按照相识度分割成几类,也就是归类算法 k-means算法是一种简单的迭代型聚类算法 ...

    OpenCV and Python K-Means Color Clustering(图像像素聚类)

    英文原文

    translator:aaron-clark-aic

    简单讲,聚类就是将一组数据按照相识度分割成几类,也就是归类算法

    k-means算法是一种简单的迭代型聚类算法

    Python opencv中的k-mean聚类算法有现成的实现

    需要注意的是,对于图像聚类我们需要将图像矩阵转换为像素的列表

    # load the image and show it
    image_base = cv.imread(".././img/base.jpg")
    
    # reshape the image to be a list of pixels
    image = image_base.reshape((image_base.shape[0] * image_base.shape[1], 3))
    

    调用聚类算法的实现,实现聚类

    k = 5 #聚类的类别个数
    iterations = 4 #并发数4
    iteration = 200 #聚类最大循环次数
    
    clt = KMeans(n_clusters = k, n_jobs = iterations, max_iter = iteration) 
    clt.fit(image)
    
    

    调用直方图算法的实现,统计出图像的聚类分布

    def centroid_histogram(clt):
        # grab the number of different clusters and create a histogram
        # based on the number of pixels assigned to each cluster
        numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
        (hist, _) = np.histogram(clt.labels_, bins=numLabels)
    
        # normalize the histogram, such that it sums to one
        hist = hist.astype("float")
        hist /= hist.sum()
    
        # return the histogram
        return hist
    
    
    def plot_colors(hist, centroids):
        # initialize the bar chart representing the relative frequency
        # of each of the colors
        bar = np.zeros((50, 300, 3), dtype="uint8")
        startX = 0
    
        # loop over the percentage of each cluster and the color of
        # each cluster
        for (percent, color) in zip(hist, centroids):
            # plot the relative percentage of each cluster
            endX = startX + (percent * 300)
            cv.rectangle(bar, (int(startX), 0), (int(endX), 50),
                          color.astype("uint8").tolist(), -1)
            startX = endX
    
        # return the bar chart
        return bar
    
    hist = centroid_histogram(clt)
    bar = plot_colors(hist, clt.cluster_centers_)
    

    完整代码

    在这里插入图片描述

    # import the necessary packages
    from matplotlib import pyplot as plt
    from sklearn.cluster import KMeans
    import cv2 as cv
    import numpy as np
    
    
    def centroid_histogram(clt):
        # grab the number of different clusters and create a histogram
        # based on the number of pixels assigned to each cluster
        numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
        (hist, _) = np.histogram(clt.labels_, bins=numLabels)
    
        # normalize the histogram, such that it sums to one
        hist = hist.astype("float")
        hist /= hist.sum()
    
        # return the histogram
        return hist
    
    
    def plot_colors(hist, centroids):
        # initialize the bar chart representing the relative frequency
        # of each of the colors
        bar = np.zeros((50, 300, 3), dtype="uint8")
        startX = 0
    
        # loop over the percentage of each cluster and the color of
        # each cluster
        for (percent, color) in zip(hist, centroids):
            # plot the relative percentage of each cluster
            endX = startX + (percent * 300)
            cv.rectangle(bar, (int(startX), 0), (int(endX), 50),
                          color.astype("uint8").tolist(), -1)
            startX = endX
    
        # return the bar chart
        return bar
    
    # load the image and show it
    image_base = cv.imread(".././img/base.jpg")
    
    # reshape the image to be a list of pixels
    image = image_base.reshape((image_base.shape[0] * image_base.shape[1], 3))
    
    k = 5 #聚类的类别个数
    iterations = 4 #并发数4
    iteration = 200 #聚类最大循环次数
    
    clt = KMeans(n_clusters = k, n_jobs = iterations, max_iter = iteration)
    clt.fit(image)
    
    hist = centroid_histogram(clt)
    bar = plot_colors(hist, clt.cluster_centers_)
    
    # show our color bart
    fig = plt.figure()
    ax = fig.add_subplot(211)
    ax.imshow(image_base)
    ax = fig.add_subplot(212)
    ax.imshow(bar)
    plt.show()
    
    cv.waitKey(0)
    
    
    
    展开全文
  • 像素聚类_超类

    2020-09-14 03:44:11
    像素聚类 Definition: 定义: A superclass is a class that has been extended by another class. It allows the extending class to inherit its state and behaviors. 超类是被另一个类扩展的类。 它...

    超像素聚类

    Definition:

    定义:

    A superclass is a class that has been extended by another class. It allows the extending class to inherit its state and behaviors.

    超类是被另一个类扩展的类。 它允许扩展类继承其状态和行为。

    Also Known As: base class, parent class

    也称为:基类,父类

    Examples:

    例子:

    Imagine you define a Person class:

    假设您定义了一个Person类:

    public class Person
    {
    }

    A new class can be created by extending this class:

    可以通过扩展此类来创建一个新类:

    public class Employee extends Person
    {
    }

    The Person class is said to be the superclass of the Employee class.

    据说Person类是Employee类的超类。

    翻译自: https://www.thoughtco.com/superclass-2034298

    超像素聚类

    展开全文
  • k-means像素聚类

    万次阅读 多人点赞 2015-11-26 10:06:12
    使用K-means进行像素聚类python通过使用K-means对像素聚类以此进行图像分割K-means聚类简介:K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为...
  • 基于像素聚类的指纹分割算法.pdf
  • 基于像素聚类的超声图像分割.pdf
  • 针对细胞图像尺寸大、细胞形状各异,导致从图像中分割出精准的细胞十分困难的问题,以卷积神经网络为基础,结合染色校正方法和简单线性迭代的超像素聚类算法,提出了一种新的结构来进行细胞图像分割。利用染色校正...
  • 用于文本区域提取的边缘像素聚类方法.pdf
  • 基于像素聚类的空间变化表面材质建模.pdf
  • 基于改进像素聚类算法的输电线路冰区识别方法.pdf
  • 综合引导滤波和字典学习超像素聚类图像融合.pdf
  • 基于超像素聚类的侧扫声呐图像分割算法.pdf
  • 一种新的基于超像素聚类的图像分割算法.pdf
  • 利用改进的超像素聚类算法分割和检测肺结节.pdf
  • 基于超像素聚类的EM脐橙病虫害图像的分割.pdf
  • 本期推荐一篇state-of-the-art超像素分割论文:Wei X, Yang QX, Gong YH, et al. Superpixel Hierarchy[J]. IEEE TIP, 2018, 27(10): 4838-4849.IEEE TIP 论文在线版本1 Target快速/实时+准确 的超像素分割2 ...
  • 在本文中,我们提出了一种高质量的像素聚类方法,该方法可以实时从单个图像中去除镜面高光。我们遵循先前的工作,并估计每个像素的最小和最大色度值。然后,我们分析了这些值在最小最大色度空间中的分布模式,以提出...
  • 基于超像素聚类和立体视差的显着性检测
  • 基于像素聚类的苏木精-伊红染色的肝脏组织病理学图像的高通量脂肪定量
  • 根据颜色计算像素簇。 该算法基于Orchard和Bouman描述的uopon二叉树量化技术。 该代码可用于生成混合高斯模型,用于基于图切割的图像分割算法。
  • Python图像聚类

    2019-03-05 10:22:28
    请结合本人该篇博客进行理解: https://blog.csdn.net/weixin_44344462/article/details/88169565
  • 数据处理--图片像素聚类

    千次阅读 2018-08-22 19:00:24
    原理: 将原图数据的像素点替换为分为聚类后的像素点,这些像素点其实就是将原数据的像素点分为16种后的像素点 result_img = centers[y_] 6)将聚类后的图片绘出来比较 注意:要将图片的数据进行形状...
  • 像素聚类区域成长法-- 顾名思义,此方法从一个种子像素开始,通过如平均灰度,组织纹理及色彩等性质的判断,将具有类似性质的像素逐一纳入所考虑的区域中,使此区域由种子逐渐成长成一个性质相似的图像区块。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,757
精华内容 6,302
关键字:

像素聚类

友情链接: ImproveTCP_V1.rar