在基于深度学习的目标检测算法的综述 那一节中我们提到基于区域提名的目标检测中广泛使用的选择性搜索算法。并且该算法后来被应用到了R-CNN,SPP-Net,Fast R-CNN中。因此我认为还是有研究的必要。

传统的目标检测算法大多数以图像识别为基础。一般可以在图片上使用穷举法或者滑动窗口选出所有物体可能出现的区域框,对这些区域框提取特征并进行使用图像识别分类方法,得到所有分类成功的区域后,通过非极大值抑制输出结果。

在图片上使用穷举法或者滑动窗口选出所有物体可能出现的区域框,就是在原始图片上进行不同尺度不同大小的滑窗,获取每个可能的位置。而这样做的缺点也显而易见,复杂度太高,产生了很多的冗余候选区域,而且由于不可能每个尺度都兼顾到,因此得到的目标位置也不可能那么准,在现实当中不可行。而选择性搜索有效地去除冗余候选区域,使得计算量大大的减小。

我们先来看一组图片,由于我们事先不知道需要检测哪个类别,因此第一张图的桌子、瓶子、餐具都是一个个候选目标,而餐具包含在桌子这个目标内,勺子又包含在碗内。这张图展示了目标检测的层级关系以及尺度关系,那我们如何去获得这些可能目标的位置呢。我们能不能通过视觉特征去减少候选框的数量并提高精确度呢。

可用的特征有很多,到底什么特征是有用的呢?我们看第二副图片的两只猫咪,他们的纹理是一样的,因此纹理特征肯定不行了。而如果通过颜色则能很好区分。但是第三幅图变色龙可就不行了,这时候边缘特征、纹理特征又显得比较有用。而在最后一幅图中,我们很容易把车和轮胎看作是一个整体,但是其实这两者的特征差距真的很明显啊,无论是颜色还是纹理或是边缘都差的太远了。而这这是几种情况,自然图像那么多,我们通过什么特征去区分?应该区分到什么尺度?

selective search的策略是,既然是不知道尺度是怎样的,那我们就尽可能遍历所有的尺度好了,但是不同于暴力穷举,我们可以先利用基于图的图像分割的方法得到小尺度的区域,然后一次次合并得到大的尺寸就好了,这样也符合人类的视觉认知。既然特征很多,那就把我们知道的特征都用上,但是同时也要照顾下计算复杂度,不然和穷举法也没啥区别了。最后还要做的是能够对每个区域进行排序,这样你想要多少个候选我就产生多少个,不然总是产生那么多你也用不完不是吗?

在深入介绍Selective Search之前,先说说其需要考虑的几个问题:

  •  适应不同尺度(Capture All Scales):穷举搜索(Exhaustive Selective)通过改变窗口大小来适应物体的不同尺度,选择搜索(Selective Search)同样无法避免这个问题。算法采用了图像分割(Image Segmentation)以及使用一种层次算法(Hierarchical Algorithm)有效地解决了这个问题。
  • 多样化(Diversification):单一的策略无法应对多种类别的图像。使用颜色(color)、纹理(texture)、大小(size)等多种策略对分割好的区域(region)进行合并。
  • 速度快(Fast to Compute):算法,就像功夫一样,唯快不破!

一 选择性搜索的具体算法(区域合并算法)

输入: 一张图片
输出:候选的目标位置集合L算法:
1: 利用切分方法得到候选的区域集合R = {r1,r2,…,rn}
2: 初始化相似集合S = ϕ
3: foreach 遍历邻居区域对(ri,rj) do
4:     计算相似度s(ri,rj)
5:     S = S  ∪ s(ri,rj)
6: while S not=ϕ do
7:     从S中得到最大的相似度s(ri,rj)=max(S)
8:     合并对应的区域rt = ri ∪ rj
9:     移除ri对应的所有相似度:S = S\s(ri,r*)
10:    移除rj对应的所有相似度:S = S\s(r*,rj)
11:    计算rt对应的相似度集合St
12:    S = S ∪ St
13:    R = R ∪ rt
14: L = R中所有区域对应的边框

首先通过基于图的图像分割方法初始化原始区域,就是将图像分割成很多很多的小块。然后我们使用贪心策略,计算每两个相邻的区域的相似度,然后每次合并最相似的两块,直到最终只剩下一块完整的图片。然后这其中每次产生的图像块包括合并的图像块我们都保存下来,这样就得到图像的分层表示了呢。那我们如何计算两个图像块的相似度呢?

二 保持多样性的策略

区域合并采用了多样性的策略,如果简单采用一种策略很容易错误合并不相似的区域,比如只考虑纹理时,不同颜色的区域很容易被误合并。选择性搜索采用三种多样性策略来增加候选区域以保证召回:

  • 多种颜色空间,考虑RGB、灰度、HSV及其变种等
  • 多种相似度度量标准,既考虑颜色相似度,又考虑纹理、大小、重叠情况等。
  • 通过改变阈值初始化原始区域,阈值越大,分割的区域越少。

1、颜色空间变换

通过色彩空间变换,将原始色彩空间转换到多达八中的色彩空间。作者采用了8中不同的颜色方式,主要是为了考虑场景以及光照条件等。这个策略主要应用于中图像分割算法中原始区域的生成(两个像素点的相似度计算时,计算不同颜色空间下的两点距离)。主要使用的颜色空间有:(1)RGB,(2)灰度I,(3)Lab,(4)rgI(归一化的rg通道加上灰度),(5)HSV,(6)rgb(归一化的RGB),(7)C,(8)H(HSV的H通道)

2、区域相似度计算

我们在计算多种相似度的时候,都是把单一相似度的值归一化到[0,1]之间,1表示两个区域之间相似度最大。

  • 颜色相似度

使用L1-norm归一化获取图像每个颜色通道的25 bins的直方图,这样每个区域都可以得到一个75维的向量区域之间颜色相似度通过下面的公式计算:

                                              

 

上面这个公式可能你第一眼看过去看不懂,那咱们打个比方,由于是归一化后值,每一个颜色通道的直方图累加和为1.0,三个通道的累加和就为3.0,如果区域ci和区域cj直方图完全一样,则此时颜色相似度最大为3.0,如果不一样,由于累加取两个区域bin的最小值进行累加,当直方图差距越大,累加的和就会越小,即颜色相似度越小。

在区域合并过程中使用需要对新的区域进行计算其直方图,计算方法:

                                                     

 

  • 纹理相似度

这里的纹理采用SIFT-Like特征。具体做法是对每个颜色通道的8个不同方向计算方差σ=1的高斯微分(Gaussian Derivative),使用L1-norm归一化获取图像每个颜色通道的每个方向的10 bins的直方图,这样就可以获取到一个240(10x8x3)维的向量

,区域之间纹理相似度计算方式和颜色相似度计算方式类似,合并之后新区域的纹理特征计算方式和颜色特征计算相同:

                                                             

 

  • 优先合并小的区域

如果仅仅是通过颜色和纹理特征合并的话,很容易使得合并后的区域不断吞并周围的区域,后果就是多尺度只应用在了那个局部,而不是全局的多尺度。因此我们给小的区域更多的权重,这样保证在图像每个位置都是多尺度的在合并。

                                                                   

上面的公式表示,两个区域越小,其相似度越大,越接近1。

  • 区域的合适度距离

如果区域ri包含在rj内,我们首先应该合并,另一方面,如果ri很难与rj相接,他们之间会形成断崖,不应该合并在一块。这里定义区域的合适度距离主要是为了衡量两个区域是否更加“吻合”,其指标是合并后的区域的Bounding Box(能够框住区域的最小矩形BBij)越小,其吻合度越高,即相似度越接近1。其计算方式:

                                                   

  • 合并上面四种相似度

                                                  

 

 给区域打分

通过上述的步骤我们能够得到很多很多的区域,但是显然不是每个区域作为目标的可能性都是相同的,因此我们需要衡量这个可能性,这样就可以根据我们的需要筛选区域建议个数啦。

这篇文章做法是,给予最先合并的图片块较大的权重,比如最后一块完整图像权重为1,倒数第二次合并的区域权重为2以此类推。但是当我们策略很多,多样性很多的时候呢,这个权重就会有太多的重合了,排序不好搞啊。文章做法是给他们乘以一个随机数,毕竟3分看运气嘛,然后对于相同的区域多次出现的也叠加下权重,毕竟多个方法都说你是目标,也是有理由的嘛。这样我就得到了所有区域的目标分数,也就可以根据自己的需要选择需要多少个区域了。

四 选择性搜索性能评估

自然地,通过算法计算得到的包含物体的Bounding Boxes与真实情况(ground truth)的窗口重叠越多,那么算法性能就越好。这是使用的指标是平均最高重叠率ABO(Average Best Overlap)。对于每个固定的类别 c,每个真实情况(ground truth)表示为 ,令计算得到的位置假设L中的每个值lj,那么 ABO的公式表达为:

                                                              

上面结果给出的是一个类别的ABO,对于所有类别下的性能评价,很自然就是使用所有类别的ABO的平均值MABO(Mean Average Best Overlap)来评价。

 1、单一策略评估

我们可以通过改变多样性策略中的任何一种,评估选择性搜索的MABO性能指标。论文中采取的策略如下:

  • 使用RGB色彩空间(基于图的图像分割会利用不同的色彩进行图像区域分割)
  • 采用四种相似度计算的组合方式
  • 设置图像分割的阈值k=50

然后通过改变其中一个策略参数,获取MABO性能指标如下表(第一列为改变的参数,第二列为MABO值,第三列为获取的候选区的个数):

表中左侧为不同的相似度组合,单独的,我们可以看到纹理相似度表现最差,MABO为0.581,其他的MABO值介于0.63和0.64之间。当使用多种相似度组合时MABO性能优于单种相似度。表的右上角表名使用HSV颜色空间,有463个候选区域,而且MABO值最大为0.693。表的右下角表名使用较小的阈值,会得到更多的候选区和较高的MABO值。

2、多样性策略组合

我们使用贪婪的搜索算法,把单一策略进行组合,会获得较高的MABO,但是也会造成计算成本的增加。下表给出了三种组合的MABO性能指标:

上图中的绿色边框为对象的标记边框,红色边框为我们使用 'Quality' Selective Search算法获得的Overlap最高的候选框。可以看到我们这个候选框和真实标记非常接近。

下表为和其它算法在VOC 2007测试集上的比较结果:

 

 五、代码实现

 

# -*- coding: utf-8 -*-
from __future__ import (division,print_function,
)import skimage.data
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from PIL import Image
import numpy as npimport sys
sys.path.append('../')
from selectivesearch import selectivesearchdef main():# loading astronaut imageimg = skimage.data.astronaut()#print(img)ima = Image.open('1.jpg')print(ima.size)img = np.asarray(ima)print(img)# perform selective searchimg_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=10)#计算一共分割了多少个原始候选区域candidates = set()     #创建一个集合 元素不会重复,每一个元素都是一个list(左上角x,左上角y,宽,高),表示一个候选区域的边框for r in regions:# excluding same rectangle (with different segments)         #排除重复的候选区if r['rect'] in candidates:continue# excluding regions smaller than 2000 pixels         #排除小于 2000 pixels的候选区域(并不是bounding box中的区域大小)if r['size'] < 2000:continue# distorted rects          #排除扭曲的候选区域边框  即只保留近似正方形的x, y, w, h = r['rect']if w / h > 1.2 or h / w > 1.2:continuecandidates.add(r['rect'])# draw rectangles on the original image     #在原始图像上绘制候选区域边框fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))ax.imshow(img)for x, y, w, h in candidates:print(x, y, w, h)rect = mpatches.Rectangle((x, y), w, h, fill=False, edgecolor='red', linewidth=1)ax.add_patch(rect)plt.show()if __name__ == "__main__":main()

selective_search函数的定义如下:

# -*- coding: utf-8 -*-
from __future__ import divisionimport skimage.io
import skimage.feature
import skimage.color
import skimage.transform
import skimage.util
import skimage.segmentation
import numpy# "Selective Search for Object Recognition" by J.R.R. Uijlings et al.
#
#  - Modified version with LBP extractor for texture vectorizationdef _generate_segments(im_orig, scale, sigma, min_size):"""segment smallest regions by the algorithm of Felzenswalb andHuttenlocher"""#对图像进行分块处理,作为rgb的第四维,为region# open the Imageim_mask = skimage.segmentation.felzenszwalb(skimage.util.img_as_float(im_orig), scale=scale, sigma=sigma,min_size=min_size)print(im_mask.shape)print(im_orig.shape[:2])# merge mask channel to the image as a 4th channelim_orig = numpy.append(im_orig, numpy.zeros(im_orig.shape[:2])[:, :, numpy.newaxis], axis=2)im_orig[:, :, 3] = im_maskprint(im_orig.shape)return im_origdef _sim_colour(r1, r2):"""计算颜色相似度calculate the sum of histogram intersection of colourargs:r1:候选区域r1r2:候选区域r2return:[0,3]之间的数值"""return sum([min(a, b) for a, b in zip(r1["hist_c"], r2["hist_c"])])def _sim_texture(r1, r2):"""计算纹理特征相似度calculate the sum of histogram intersection of textureargs:r1:候选区域r1r2:候选区域r2return:[0,3]之间的数值"""return sum([min(a, b) for a, b in zip(r1["hist_t"], r2["hist_t"])])def _sim_size(r1, r2, imsize):"""计算候选区域大小相似度calculate the size similarity over the imageargs:r1:候选区域r1r2:候选区域r2return:[0,1]之间的数值"""return 1.0 - (r1["size"] + r2["size"]) / imsizedef _sim_fill(r1, r2, imsize):"""计算候选区域的距离合适度相似度calculate the fill similarity over the imageargs:r1:候选区域r1r2:候选区域r2imsize:原图像像素数return:[0,1]之间的数值"""bbsize = ((max(r1["max_x"], r2["max_x"]) - min(r1["min_x"], r2["min_x"]))* (max(r1["max_y"], r2["max_y"]) - min(r1["min_y"], r2["min_y"])))return 1.0 - (bbsize - r1["size"] - r2["size"]) / imsizedef _calc_sim(r1, r2, imsize):'''计算两个候选区域的相似度,权重系数默认都是1args:r1:候选区域r1r2:候选区域r2imsize:原图片像素数'''return (_sim_colour(r1, r2) + _sim_texture(r1, r2)+ _sim_size(r1, r2, imsize) + _sim_fill(r1, r2, imsize))def _calc_colour_hist(img):"""使用L1-norm归一化获取图像每个颜色通道的25 bins的直方图,这样每个区域都可以得到一个75维的向量calculate colour histogram for each regionthe size of output histogram will be BINS * COLOUR_CHANNELS(3)number of bins is 25 as same as [uijlings_ijcv2013_draft.pdf]extract HSVargs:img:ndarray类型, 形状为候选区域像素数 x 3(h,s,v)return:一维的ndarray类型,长度为75"""BINS = 25hist = numpy.array([])for colour_channel in (0, 1, 2):# extracting one colour channelc = img[:, colour_channel]# calculate histogram for each colour and join to the resulthist = numpy.concatenate([hist] + [numpy.histogram(c, BINS, (0.0, 255.0))[0]])# L1 normalize len(img):候选区域像素数hist = hist / len(img)return histdef _calc_texture_gradient(img):"""原文:对每个颜色通道的8个不同方向计算方差σ=1的高斯微分(Gaussian Derivative,这里使用LBP替代calculate texture gradient for entire imageThe original SelectiveSearch algorithm proposed Gaussian derivativefor 8 orientations, but we use LBP instead.output will be [height(*)][width(*)]args:img: ndarray类型,形状为height x width x 4,每一个像素的值为 [r,g,b,(region)]return:纹理特征,形状为height x width x 4"""ret = numpy.zeros((img.shape[0], img.shape[1], img.shape[2]))for colour_channel in (0, 1, 2):ret[:, :, colour_channel] = skimage.feature.local_binary_pattern(img[:, :, colour_channel], 8, 1.0)return retdef _calc_texture_hist(img):"""calculate texture histogram for each regioncalculate the histogram of gradient for each coloursthe size of output histogram will beBINS * ORIENTATIONS * COLOUR_CHANNELS(3)"""BINS = 10hist = numpy.array([])print(img.shape)for colour_channel in (0, 1, 2):# mask by the colour channelfd = img[:, colour_channel]# calculate histogram for each orientation and concatenate them all# and join to the resulthist = numpy.concatenate([hist] + [numpy.histogram(fd, BINS, (0.0, 1.0))[0]])# L1 Normalizehist = hist / len(img)return histdef _extract_regions(img):'''提取每一个候选区域的信息   比如类别(region)为5的区域表示的是一只猫的选区,这里就是提取这只猫的边界框,左上角后右下角坐标args:img: ndarray类型,形状为height x width x 4,每一个像素的值为 [r,g,b,(region)]return :R:dict 每一个元素对应一个候选区域, 每个元素也是一个dict类型{min_x:边界框的左上角x坐标,min_y:边界框的左上角y坐标,max_x:边界框的右下角x坐标,max_y:边界框的右下角y坐标,size:像素个数,hist_c:颜色的直方图,hist_t:纹理特征的直方图,}'''R = {}# get hsv imagehsv = skimage.color.rgb2hsv(img[:, :, :3])# pass 1: count pixel positions 遍历每一个像素for y, i in enumerate(img):print(y)print(i.shape)for x, (r, g, b, l) in enumerate(i):# initialize a new regionif l not in R:R[l] = {"min_x": 0xffff, "min_y": 0xffff,"max_x": 0, "max_y": 0, "labels": [l]}# bounding boxif R[l]["min_x"] > x:R[l]["min_x"] = xif R[l]["min_y"] > y:R[l]["min_y"] = yif R[l]["max_x"] < x:R[l]["max_x"] = xif R[l]["max_y"] < y:R[l]["max_y"] = yprint(R[l]["min_x"], R[l]["min_y"], R[l]["max_x"],R[l]["max_y"] )# pass 2: calculate texture gradient 纹理特征提取 利用LBP算子 height x width x 4tex_grad = _calc_texture_gradient(img)# pass 3: calculate colour histogram of each region 计算每一个候选区域(注意不是bounding box圈住的区域)的直方图for k, v in list(R.items()):#print(hsv.shape)(500, 666, 3)#print(hsv[:, :, :].shape)#print(img.shape) (500, 666, 4)#print(img[:, :, 3].shape)print(img[:, :, 3])# colour histogrammasked_pixels = hsv[:, :, :][img[:, :, 3] == k]print(masked_pixels.shape)R[k]["size"] = len(masked_pixels / 4) #为什么除以4 计算长度 #候选区域k像素数???#在hsv色彩空间下,使用L1-norm归一化获取图像每个颜色通道的25 bins的直方图,这样每个区域都可以得到一个75维的向量R[k]["hist_c"] = _calc_colour_hist(masked_pixels)print(tex_grad[:, :].shape)# texture histogram          #在rgb色彩空间下,使用L1-norm归一化获取图像每个颜色通道的每个方向的10 bins的直方图,这样就可以获取到一个240(10x8x3)维的向量R[k]["hist_t"] = _calc_texture_hist(tex_grad[:, :][img[:, :, 3] == k])return Rdef _extract_neighbours(regions):'''提取 邻居候选区域对(ri,rj)(即两两相交)args:regions:dict 每一个元素都对应一个候选区域return:返回一个list,每一个元素都对应一个邻居候选区域对'''# 判断两个候选区域是否相交def intersect(a, b):if (a["min_x"] < b["min_x"] < a["max_x"]and a["min_y"] < b["min_y"] < a["max_y"]) or (a["min_x"] < b["max_x"] < a["max_x"]and a["min_y"] < b["max_y"] < a["max_y"]) or (a["min_x"] < b["min_x"] < a["max_x"]and a["min_y"] < b["max_y"] < a["max_y"]) or (a["min_x"] < b["max_x"] < a["max_x"]and a["min_y"] < b["min_y"] < a["max_y"]):return Truereturn False#转换为list 每一个元素 (l,regions[l])R = list(regions.items())#保存两两相交候选区域对neighbours = []# 每次抽取两个候选区域 两两组合,判断是否相交for cur, a in enumerate(R[:-1]):print(cur)print(a)for b in R[cur + 1:]:if intersect(a[1], b[1]):neighbours.append((a, b))return neighboursdef _merge_regions(r1, r2):new_size = r1["size"] + r2["size"]rt = {"min_x": min(r1["min_x"], r2["min_x"]),"min_y": min(r1["min_y"], r2["min_y"]),"max_x": max(r1["max_x"], r2["max_x"]),"max_y": max(r1["max_y"], r2["max_y"]),"size": new_size,"hist_c": (r1["hist_c"] * r1["size"] + r2["hist_c"] * r2["size"]) / new_size,"hist_t": (r1["hist_t"] * r1["size"] + r2["hist_t"] * r2["size"]) / new_size,"labels": r1["labels"] + r2["labels"]}return rtdef selective_search(im_orig, scale=1.0, sigma=0.8, min_size=50):'''Selective SearchParameters----------im_orig : ndarrayInput imagescale : int    用felzenszwalb segmentation算法把图像簇的个数Free parameter. Higher means larger clusters in felzenszwalb segmentation.sigma : float 表示felzenszwalb分割时,用的高斯核宽度 相当于是方差Width of Gaussian kernel for felzenszwalb segmentation.min_size : int 表示分割后最小组尺寸Minimum component size for felzenszwalb segmentation.Returns-------img : ndarrayimage with region labelregion label is stored in the 4th value of each pixel [r,g,b,(region)]regions : array of dict[{'rect': (left, top, width, height),'labels': [...],'size': component_size},...]'''assert im_orig.shape[2] == 3, "3ch image is expected"# load image and get smallest regions# region label is stored in the 4th value of each pixel [r,g,b,(region)]img = _generate_segments(im_orig, scale, sigma, min_size)if img is None:return None, {}imsize = img.shape[0] * img.shape[1]R = _extract_regions(img)# extract neighbouring information 每一个元素都是邻居候选区域对(ri,rj)  (即两两相交的候选区域)neighbours = _extract_neighbours(R)# calculate initial similarities 初始化相似集合S = ϕS = {}#计算每一个邻居候选区域对的相似度s(ri,rj)for (ai, ar), (bi, br) in neighbours:#S=S∪s(ri,rj)  ai表示候选区域ar的标签  比如当ai=1 bi=2 S[(1,2)就表示候选区域1和候选区域2的相似度S[(ai, bi)] = _calc_sim(ar, br, imsize)# hierarchal search 层次搜索 直至相似度集合为空while S != {}:# get highest similarity  获取相似度最高的两个候选区域  i,j表示候选区域标签i, j = sorted(S.items(), key=lambda i: i[1])[-1][0]print(sorted(S.items(), key=lambda i: i[1]))#按照相似度排序# merge corresponding regions 合并相似度最高的两个邻居候选区域 rt = ri∪rj ,R = R∪rtt = max(R.keys()) + 1.0R[t] = _merge_regions(R[i], R[j])# mark similarities for regions to be removed 获取需要删除的元素的键值key_to_delete = []for k, v in list(S.items()):if (i in k) or (j in k):key_to_delete.append(k)# remove old similarities of related regions 移除候选区域ri对应的所有相似度:S = S\s(ri,r*)  移除候选区域rj对应的所有相似度:S = S\s(r*,rj)for k in key_to_delete: #k表示邻居候选区域对(i,j)  v表示候选区域(i,j)表示相似度del S[k]# calculate similarity set with the new region 计算候选区域rt对应的相似度集合St,S = S∪Stfor k in [a for a in key_to_delete if a != (i, j)]:n = k[1] if k[0] in (i, j) else k[0]S[(t, n)] = _calc_sim(R[t], R[n], imsize)#获取每一个候选区域的的信息  边框、以及候选区域size,标签regions = []for k, r in list(R.items()):regions.append({'rect': (r['min_x'], r['min_y'],r['max_x'] - r['min_x'], r['max_y'] - r['min_y']),'size': r['size'],'labels': r['labels']})#img:基于图的图像分割得到的候选区域   regions:Selective Search算法得到的候选区域return img, regions

输出:

其中用到的一些函数解释:

1.felzenszwalb

from skimage.segmentation import felzenszwalb
from skimage.data import coffeeimport matplotlib.pyplot as plt  
from PIL import Image
import numpy as np
'''
felzenszwalb 算法的分割
'''img = coffee()print(img.shape)
print(type(img))# img = Image.open('./1.jpg')
# img = np.asarray(img)
segments = felzenszwalb(img, scale=3.0, sigma=0.95, min_size=5)print(segments)plt.imshow(segments);plt.show()

 

2.LBP

from __future__ import divisionimport skimage.io
import skimage.feature
import skimage.color
import skimage.transform
import skimage.util
import skimage.segmentation
import numpyimport matplotlib.pyplot as pltfrom skimage.segmentation import felzenszwalb
from skimage.data import coffeeimg = coffee()for colour_channel in (0, 1, 2):img[:, :, colour_channel] = skimage.feature.local_binary_pattern(img[:, :, colour_channel], 8,1.0,method='var')
# method 有好多种BPL方法  这里选择的是varplt.imshow(img);plt.show()"""Gray scale and rotation invariant LBP (Local Binary Patterns).LBP is an invariant descriptor that can be used for texture classification.Parameters----------image : (N, M) arrayGraylevel image.P : intNumber of circularly symmetric neighbour set points (quantization ofthe angular space).R : floatRadius of circle (spatial resolution of the operator).method : {'default', 'ror', 'uniform', 'var'}Method to determine the pattern.* 'default': original local binary pattern which is gray scale but notrotation invariant.* 'ror': extension of default implementation which is gray scale androtation invariant.* 'uniform': improved rotation invariance with uniform patterns andfiner quantization of the angular space which is gray scale androtation invariant.* 'nri_uniform': non rotation-invariant uniform patterns variantwhich is only gray scale invariant [2]_.* 'var': rotation invariant variance measures of the contrast of localimage texture which is rotation but not gray scale invariant.Returns-------output : (N, M) arrayLBP image.References----------.. [1] Multiresolution Gray-Scale and Rotation Invariant TextureClassification with Local Binary Patterns.Timo Ojala, Matti Pietikainen, Topi Maenpaa.http://www.ee.oulu.fi/research/mvmp/mvg/files/pdf/pdf_94.pdf, 2002... [2] Face recognition with local binary patterns.Timo Ahonen, Abdenour Hadid, Matti Pietikainen,http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.214.6851,2004.methods = {'default': ord('D'),'ror': ord('R'),'uniform': ord('U'),'nri_uniform': ord('N'),'var': ord('V')}"""

3. numpy

import numpy as npa = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#某二行转化为列
row_to_col_un = a[1,:][:,np.newaxis]#2,3行,转化为列row1 = a[1,:][:,np.newaxis]
row2 = a[2,:][:,np.newaxis]
row_to_col_uns = np.hstack([row1, row2])
'''[[ 5  9][ 6 10][ 7 11][ 8 12]]
'''#行全部转化为列  用转置
a.T#2,3行转化为单独的列
a_1 = a[1:3,:,np.newaxis]#所有的行转化为单列
a_1 = a[:,:,np.newaxis]
'''[[[ 1][ 2][ 3][ 4]][[ 5][ 6][ 7][ 8]][[ 9][10][11][12]]]
'''

import numpy as np'''numpy.seterr对浮点数进行处理numpy.seterr(all=None, divide=None, over=None, under=None, invalid=None) '''old_settings = np.seterr(all='ignore')  # seterr to known value
#{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
np.seterr(over='raise')de = np.seterr(**old_settings)  # reset to default
print(de)np.int16(32000) * np.int16(3)old_settings = np.seterr(all='warn', over='raise')np.int16(32000) * np.int16(3)
old_settings = np.seterr(all='print')
np.geterr()
np.int16(32000) * np.int16(3)

import numpy as npa = np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
print(a)a = np.histogram([1], bins=np.arange(5), density=True) #概率密度
print(a)

4.rgb_to_hsv

import numpy as np
from skimage import data,img_as_float
from PIL import Image
import matplotlib.pyplot as pltdef _prepare_colorarray(arr):"""Check the shape of the array and convert it tofloating point representation."""arr = np.asanyarray(arr)if arr.ndim not in [3, 4] or arr.shape[-1] != 3:msg = ("the input array must be have a shape == (.., ..,[ ..,] 3)), " +"got (" + (", ".join(map(str, arr.shape))) + ")")raise ValueError(msg)return img_as_float(arr)#RGB -- HSV 色相(Hue)、饱和度(Saturation)、明度(Value)
def rgb2hsv(rgb):"""RGB to HSV color space conversion.Parameters----------rgb : array_likeThe image in RGB format, in a 3-D array of shape ``(.., .., 3)``.Returns-------out : ndarrayThe image in HSV format, in a 3-D array of shape ``(.., .., 3)``.Raises------ValueErrorIf `rgb` is not a 3-D array of shape ``(.., .., 3)``.Notes-----Conversion between RGB and HSV color spaces results in some loss ofprecision, due to integer arithmetic and rounding [1]_.References----------.. [1] http://en.wikipedia.org/wiki/HSL_and_HSVExamples-------->>> from skimage import color>>> from skimage import data>>> img = data.astronaut()>>> img_hsv = color.rgb2hsv(img)"""arr = _prepare_colorarray(rgb)   #转化为float类型out = np.empty_like(arr) #生成与arr相同的0矩阵# -- V channelout_v = arr.max(-1) # 求每一行的最大值# -- S channeldelta = arr.ptp(-1) # 求每一行的极差  (max - min)# Ignore warning for zero divided by zeroold_settings = np.seterr(invalid='ignore') #对浮点类型的处理,  这里有异常进行 忽略out_s = delta / out_vout_s[delta == 0.] = 0.# -- H channel# red is maxidx = (arr[:, :, 0] == out_v)out[idx, 0] = (arr[idx, 1] - arr[idx, 2]) / delta[idx]# green is maxidx = (arr[:, :, 1] == out_v)out[idx, 0] = 2. + (arr[idx, 2] - arr[idx, 0]) / delta[idx]# blue is maxidx = (arr[:, :, 2] == out_v)out[idx, 0] = 4. + (arr[idx, 0] - arr[idx, 1]) / delta[idx]out_h = (out[:, :, 0] / 6.) % 1.out_h[delta == 0.] = 0.np.seterr(**old_settings)# -- outputout[:, :, 0] = out_hout[:, :, 1] = out_sout[:, :, 2] = out_v# remove NaNout[np.isnan(out)] = 0return out#HSV -- RGB
def hsv2rgb(hsv):"""HSV to RGB color space conversion.Parameters----------hsv : array_likeThe image in HSV format, in a 3-D array of shape ``(.., .., 3)``.Returns-------out : ndarrayThe image in RGB format, in a 3-D array of shape ``(.., .., 3)``.Raises------ValueErrorIf `hsv` is not a 3-D array of shape ``(.., .., 3)``.Notes-----Conversion between RGB and HSV color spaces results in some loss ofprecision, due to integer arithmetic and rounding [1]_.References----------.. [1] http://en.wikipedia.org/wiki/HSL_and_HSVExamples-------->>> from skimage import data>>> img = data.astronaut()>>> img_hsv = rgb2hsv(img)>>> img_rgb = hsv2rgb(img_hsv)"""arr = _prepare_colorarray(hsv)hi = np.floor(arr[:, :, 0] * 6)f = arr[:, :, 0] * 6 - hip = arr[:, :, 2] * (1 - arr[:, :, 1])q = arr[:, :, 2] * (1 - f * arr[:, :, 1])t = arr[:, :, 2] * (1 - (1 - f) * arr[:, :, 1])v = arr[:, :, 2]hi = np.dstack([hi, hi, hi]).astype(np.uint8) % 6out = np.choose(hi, [np.dstack((v, t, p)),np.dstack((q, v, p)),np.dstack((p, v, t)),np.dstack((p, q, v)),np.dstack((t, p, v)),np.dstack((v, p, q))])return outif __name__ == '__main__':ima = Image.open('./example/image_0401.jpg' )print(ima.size)img = np.asarray(ima)img_hsv = rgb2hsv(img)#plt.imshow(img_hsv);#plt.show()img = hsv2rgb(img_hsv)plt.imshow(img);plt.show()

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 游戏引擎架构----物理部分

    1. 碰撞检测系统物理世界形状&#xff1a;相交、接触&#xff08;分离矢量&#xff0c;沿该矢量运动就能高效脱离碰撞妆容&#xff09;、凸&#xff08;由形状内发射的光线不会穿越形状两次以上&#xff09; 原型&#xff1a;球体、胶囊体、轴对其包围盒AABB、定向包围盒OBB、…...

    2024/4/25 12:32:25
  2. 《Mars说光场》系列文章整理

    [导语&#xff1a;国内对光场&#xff08;Light Field&#xff09;技术的中文介绍十分匮乏&#xff0c;《Mars说光场》系列文章旨在对光场技术及其应用的科普介绍。] 光场技术是目前最受追捧的下一代显示技术&#xff0c;谷歌、Facebook、Magic Leap等国内外大公司都在大力布局…...

    2024/4/28 12:58:28
  3. 大学计算机图形考试题,大学CAD考试复习试题2017「附答案」

    大学CAD考试复习试题2017「附答案」一、选择题1、当图形中只有一个视口时&#xff0c; 【重生成】的功能与( )相同。B(A) 窗口缩放(B) 全部重生成(C) 实时平移(D) 重画2、在“缩放”工具栏中&#xff0c;共有( )种缩放工具。C(A) 10(B) 6(C) 8(D) 93、可以通过下面哪个系统变量…...

    2024/5/2 10:34:07
  4. 四轴小知识

    转载 1、惯性测量单元IMU(InertialMeasurement Unit) 姿态航向参考系统AHRS(Attitude and Heading Reference System) 地磁角速度重力MARG(Magnetic, Angular Rate, and Gravity) 微机电系统MEMS(Micro Electrical Mechanical Systems) 自由度维数DOF(Dimension Of Freedom) 无…...

    2024/4/21 14:46:10
  5. 坐标系统的详解-gis

    sf2gis163.com 2014年10月23日 2014年11月2日添加EPSG南北分带UTM 2014年12月3日添加Guass-Kruger分带计算 2014年12月4日添加等角投影 1 目的 地球是一个不规则球体&#xff0c;大地测量就是为了精确测量此球体及其表面的点位信息。 2 原理 球面坐标使用一个球体模型&…...

    2024/4/21 11:36:34
  6. 无人驾驶工程师学习笔记(三)——Canny边缘检测

    Throughout this Nanodegree Program, we will be using Python with OpenCV for computer vision work. OpenCV stands for Open-Source Computer Vision. 主页&#xff1a;https://opencv.org/ canny算法 边缘检测&#xff1a;识别图像中物体的边界&#xff0c;是opencv中的…...

    2024/4/21 14:46:09
  7. Open CASCADE基础介绍(1)

    Open CASCADE基础介绍&#xff08;1&#xff09; 一直在用OCC作项目&#xff0c;但这方面的中文资料很少&#xff0c;看来OCC在中国还不是十分普及&#xff1b; 后来&#xff0c;项目中使用OCC和DirectX结合使用&#xff0c;取得了很好的效果&#xff1b; 随着OCC6.3版本的推出…...

    2024/4/28 16:57:12
  8. H.266/VVC技术学习:帧内预测之PDPC技术

    1、PDPC介绍 为了补偿以上较简单帧内预测模式在利用空间冗余度方面的不足&#xff0c;VVC 中引入了一种根据当前样本的位置及帧内预测模式的角度自适应选取反方向角度上的参考样本信息作为新的一个相对互补性的帧内预测&#xff0c;然后将它和原有角度的帧内预测做基于样本距离…...

    2024/4/21 14:46:06
  9. 基于opencv的一种快速有效椭圆检测方法

    本篇介绍的椭圆检测方法来自以下论文&#xff0c;论文作者提供了测试代码。本文主要是对这个方法做出详解。 参考论文&#xff1a;A fast and effective ellipse detector for embedded vision applications 代码链接&#xff1a;fast_ellipse_detector 一、调用及参数说明 Siz…...

    2024/5/1 12:59:29
  10. (A-Softmax loss)SphereFace: Deep Hypersphere Embedding for Face Recognition

    https://arxiv.org/abs/1704.08063 https://github.com/wy1iu/sphereface. 摘要 本文研究了开放集协议下的深度人脸识别问题&#xff0c;在合适的度量空间下&#xff0c;理想人脸特征的最大类内距离要小于最小类间距离。然而&#xff0c;现有的算法很少能有效地达到这一标准。…...

    2024/5/2 21:55:19
  11. OpenCASCADE 基础

    OpenCASCADE 基础 转载▼ 一直在用OCC作项目&#xff0c;但这方面的中文资料很少&#xff0c;看来OCC在中国还不是十分普及&#xff1b; 后来&#xff0c;项目中使用OCC和DirectX结合使用&#xff0c;取得了很好的效果&#xff1b; 随着OCC6.3版本的推出&#xff0c;Open CASCA…...

    2024/5/1 1:19:58
  12. 游戏开发中的物理介绍

    游戏开发中的物理介绍碰撞对象物理过程回调碰撞层和蒙版GUI示例代码示例Area2DStaticBody2DRigidBody2DKinematicBody2D在游戏开发中&#xff0c;您通常需要知道游戏中的两个对象何时相交或接触。这就是所谓的碰撞检测。当检测到碰撞时&#xff0c;您通常希望发生某些事情。这就…...

    2024/4/21 14:46:04
  13. Android OpenGL ES-Cube Map

    Cube Map&#xff0c;中文可以翻译成立方环境映射&#xff0c;下面是摘自维基百科的说明&#xff1a; 立方反射映射是用立方映射使得物体看起来如同在反射周围环境的一项技术。通常&#xff0c;这通常使用户外渲染中使用的 skybox 完成。尽管由于反射物周围的物体无法在结果中…...

    2024/5/2 11:29:26
  14. 纯前端表格控件SpreadJS:新增数据透视表插件等,完美呈现强大的Excel数据分析能力

    SpreadJS 是一款基于 HTML5 的纯前端电子表格控件&#xff0c;兼容 450 种以上的 Excel 公式&#xff0c;凭借其 “高性能、跨平台、与 Excel 高度兼容”的产品特性&#xff0c;备受以华为、苏宁易购、天弘基金等为代表的企业用户青睐。 下载spreadjs最新版 四大理由让Spread…...

    2024/4/21 14:46:00
  15. RevitAPI之快速创建尺寸标注

    对于尺寸标注的创建&#xff0c;Revit API提供了以下方法来创建线性尺寸标注和对齐尺寸标注。1)创建线性尺寸标注• Autodesk. Revit. Creation. Document. NewDimension (View view, Line line, ReferenceArray references)其中&#xff0c;参数view是尺寸标注所要创建在的视图…...

    2024/4/21 14:46:00
  16. CSS3中的 Background linear gradient()用法

    本文参考自css only muti-color background如有兴趣的同学可以去看看这篇文章 这篇文章主要通过几个例子看看linear-gradient()的具体用法对linear-gradient的基础知识不做过多的介绍如有兴趣的同学可以出门左拐到mdn查看具体用法。ok话不多说让我们来看看awesome linear-gradi…...

    2024/4/28 22:43:21
  17. opencascade基础

    返回主页 大师之路 千淘万漉虽辛苦&#xff0c;吹尽狂沙始到金。 博客园 首页 新随笔 联系 管理 订阅订阅 随笔- 139 文章- 0 评论- 6 OpenCASCADE 基础 OpenCASCADE 基础 转载▼ 一直在用OCC作项目&#xff0c;但这方面的中文资料很少&#xff0c;看来OCC在中国还不是十分普及…...

    2024/5/1 17:01:35
  18. neo4j 两个点创建关系_Neo4j:找到两个纬度/经度之间的中间点

    neo4j 两个点创建关系昨天我写了一篇博客文章&#xff0c;展示了如何使用Cypher查找两个纬度/经度之间的中点&#xff0c;这是第一次尝试填补缺失位置时的效果&#xff0c;但是我意识到我可以做得更好。 正如我在上一篇文章中提到的&#xff0c;当我找到一个缺少经纬度坐标的停…...

    2024/4/23 2:07:29
  19. 双眼皮恢复两边不一样

    ...

    2024/4/27 14:12:15
  20. 双眼皮恢复会变窄多少

    ...

    2024/5/5 23:27:05

最新文章

  1. Comparable 和 Comparator,你学会了吗?

    在 Java 编程中&#xff0c;排序是一项常见的操作&#xff0c;而 Java 提供了两种不同的方式来进行对象排序&#xff1a;Comparable 和 Comparator 接口。 这两个接口提供了不同的排序方式和灵活性&#xff0c;程序员可以根据具体的需求选择合适的方式来进行对象排序。 本文将…...

    2024/5/6 5:36:01
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 职场口才提升之道

    职场口才提升之道 在职场中&#xff0c;口才的重要性不言而喻。无论是与同事沟通协作&#xff0c;还是向上级汇报工作&#xff0c;亦或是与客户洽谈业务&#xff0c;都需要具备良好的口才能力。一个出色的职场人&#xff0c;除了拥有扎实的专业技能外&#xff0c;还应具备出色…...

    2024/5/5 8:30:00
  4. idea中 错误:找不到或无法加载主类

    很神奇的就是maven打包是正常的&#xff0c;本来也是好好的&#xff0c;突然启动就报错了&#xff0c;我百度了很急&#xff0c;没什么结果&#xff0c;找了公司6年工作经验的老员工&#xff0c;还是搞了好久&#xff0c;我站了好久也是没解决。后来我也是在想maven的jar包都能…...

    2024/5/5 14:22:32
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57