-
2018-11-18 15:42:45
KMeans图像像素点聚类算法实现python:
https://blog.csdn.net/sunmc1204953974/article/details/50052099?utm_source=blogxgwz3
更多相关内容 -
dbscan-python:使用DBSCAN算法的图像像素聚类
2021-05-12 07:35:09Python DBSCAN聚类算法 使用DBSCAN算法的图像像素聚类 -
结合卷积神经网络和超像素聚类的细胞图像分割方法.pdf
2021-08-19 12:38:44结合卷积神经网络和超像素聚类的细胞图像分割方法.pdf -
基于超像素聚类的移动机器人远程可穿越区域检测
2021-03-13 10:14:52基于超像素聚类的移动机器人远程可穿越区域检测 -
论文研究-基于阈值及像素聚类的分割算法性能比较.pdf
2019-09-12 10:43:17图像分割是图像处理到分析的关键步骤,阈值分割方法因其计算简单而被广泛应用,聚类算法也因其准确性成为图像分割领域中一类极其重要的算法。选取几种经典阈值分割算法和几种聚类算法对几幅毫米波图像进行分割实验,... -
均值偏移像素聚类:此玩具代码使用均值偏移实现经典和基本像素聚类-matlab开发
2021-05-30 12:17:00这是一个很好的演示,展示了均值偏移思想如何用于图像像素聚类。 -
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
2021-08-18 23:55:55一种新的SAR图像目标检测像素聚类算法.pdf -
OpenCV and Python K-Means Color Clustering(图像像素聚类)
2019-01-15 18:00:58OpenCV 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类的超类。
超像素聚类
-
k-means像素聚类
2015-11-26 10:06:12使用K-means进行像素聚类python通过使用K-means对像素聚类以此进行图像分割K-means聚类简介:K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为... -
基于像素聚类的指纹分割算法.pdf
2021-08-21 11:53:40基于像素聚类的指纹分割算法.pdf -
基于像素聚类的超声图像分割.pdf
2021-08-19 22:29:13基于像素聚类的超声图像分割.pdf -
论文研究-结合卷积神经网络和超像素聚类的细胞图像分割方法.pdf
2019-07-22 19:20:51针对细胞图像尺寸大、细胞形状各异,导致从图像中分割出精准的细胞十分困难的问题,以卷积神经网络为基础,结合染色校正方法和简单线性迭代的超像素聚类算法,提出了一种新的结构来进行细胞图像分割。利用染色校正... -
用于文本区域提取的边缘像素聚类方法.pdf
2021-08-21 11:52:37用于文本区域提取的边缘像素聚类方法.pdf -
基于像素聚类的空间变化表面材质建模.pdf
2021-08-18 22:06:58基于像素聚类的空间变化表面材质建模.pdf -
基于改进像素聚类算法的输电线路冰区识别方法.pdf
2021-08-19 21:37:06基于改进像素聚类算法的输电线路冰区识别方法.pdf -
综合引导滤波和字典学习超像素聚类图像融合.pdf
2021-08-18 21:50:22综合引导滤波和字典学习超像素聚类图像融合.pdf -
基于超像素聚类的侧扫声呐图像分割算法.pdf
2021-08-19 12:28:38基于超像素聚类的侧扫声呐图像分割算法.pdf -
一种新的基于超像素聚类的图像分割算法.pdf
2021-08-19 11:47:13一种新的基于超像素聚类的图像分割算法.pdf -
利用改进的超像素聚类算法分割和检测肺结节.pdf
2021-08-18 23:49:31利用改进的超像素聚类算法分割和检测肺结节.pdf -
基于超像素聚类的EM脐橙病虫害图像的分割.pdf
2021-08-18 21:53:15基于超像素聚类的EM脐橙病虫害图像的分割.pdf -
基于像素聚类的分割方法基于slic的方法_【论文推荐/导读】Superpixel Hierarchy (层次超像素)...
2020-12-09 03:00:21本期推荐一篇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 ... -
使用高效像素聚类实时去除高品质镜面高光
2020-07-21 16:42:11在本文中,我们提出了一种高质量的像素聚类方法,该方法可以实时从单个图像中去除镜面高光。我们遵循先前的工作,并估计每个像素的最小和最大色度值。然后,我们分析了这些值在最小最大色度空间中的分布模式,以提出... -
基于超像素聚类和立体视差的显着性检测
2021-03-07 11:08:23基于超像素聚类和立体视差的显着性检测 -
基于像素聚类的苏木精-伊红染色的肝脏组织病理学图像的高通量脂肪定量
2021-03-14 18:22:31基于像素聚类的苏木精-伊红染色的肝脏组织病理学图像的高通量脂肪定量 -
颜色聚类 Matlab:根据颜色计算像素簇。-matlab开发
2021-06-01 12:07:48根据颜色计算像素簇。 该算法基于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)将聚类后的图片绘出来比较 注意:要将图片的数据进行形状... -
单个种子点开始的区域生长代码(像素聚类区域生长)
2011-11-25 09:45:45像素聚类区域成长法-- 顾名思义,此方法从一个种子像素开始,通过如平均灰度,组织纹理及色彩等性质的判断,将具有类似性质的像素逐一纳入所考虑的区域中,使此区域由种子逐渐成长成一个性质相似的图像区块。...