【读点论文】Gray level thresholding in badly illuminated image,光照不均匀的二值化

news2024/11/23 19:47:20

Gray level thresholding in badly illuminated image

Abstract

  • 大多数灰度阈值化方法在原始栅格图像中光照梯度规律且不大的情况下能够产生非常好的结果。在其他情况下,比如光照变化幅度较大时,就无法生成令人满意的二值图像。一种方法是首先定位目标像素,然后在它们周围生成区域,为每个像素生成一个阈值。可以有很高的把握地认为,位于灰度梯度较大的区域中的像素属于某个对象,并且邻近具有相似灰度值的像素也将属于同一对象。如果仔细生成区域,就可以生成一个阈值图像

  • Local Intensity Gradient (LIG) 是一种基于局部图像属性分析的方法,主要用于图像处理和计算机视觉领域,尤其是在边缘检测、特征提取和图像分割等任务中。其工作原理主要涉及以下几个核心概念:

    • 灰度梯度(Intensity Gradient):图像中的每一个像素点都有一个灰度值,灰度梯度描述的是相邻像素间灰度值的变化率。它能够反映出图像中亮度变化的剧烈程度,是图像边缘和纹理信息的基础。

    • 局部性:LIG强调在每个像素周围的小区域内计算梯度,这个小区域称为窗口或者邻域。通过限制在局部范围内分析,可以减少噪声影响并更好地捕捉到图像细节。

    • 梯度计算:通常使用两个基本的差分运算来估计局部灰度梯度:水平方向(Gx)和垂直方向(Gy)的导数。对于像素位置(x, y),灰度梯度可以表示为这两个方向梯度的向量和,或者计算梯度的大小(即梯度模),公式为: ∣ Δ I ∣ = G x 2 + G y 2 |\Delta I|=\sqrt{G_x^2+G_y^2} ∣ΔI=Gx2+Gy2 。其中 I 表示图像的灰度值, G x = I ( x + 1 , y ) − I ( x , y ) , G y = I ( x , y + 1 ) − I ( x , y ) G_x=I(x+1,y)-I(x,y),G_y=I(x,y+1)-I(x,y) Gx=I(x+1,y)I(x,y),Gy=I(x,y+1)I(x,y) 分别是 x 和 y 方向的一阶差分。

    • 方向信息:除了梯度的大小,有时还会关注梯度的方向,这对于某些应用如边缘跟踪和特征描述非常有用。梯度方向可以用反正切函数计算得出:

      • θ = a r c t a n G y G x \theta=arctan\frac{G_y}{G_x} θ=arctanGxGy

INTRODUCTION

  • 灰度阈值化旨在从某些图像中提取代表对象的像素,而背景像素则被忽略。通常,对象是文本或其他线形图像数据(如图形和地图)。经过阈值化处理后,对象像素将全部具有相同的灰度值,而背景像素则具有另一灰度值——通常情况下,对象像素是“黑色”,而背景是“白色”,这样就形成了二值或黑白图像。最佳阈值是能够选取所有对象像素并将其映射为黑色的阈值。遗憾的是,对于任意灰度图像来说,通常无法找到一个“最佳”的单一阈值。

  • 可以用一个简单的小图像来进行说明,如下图(a)所示。这是一个32×32像素的图像,可以看到其中包含四个不同灰度的上case字母“I”。不可能选择一个阈值,使得所有字母在二值化图像中都可见。图(b)-(e)展示了在不同阈值下进行尝试的结果。图(b)是应用迭代选择算法[Picture thresholding using an iterativelection method]的结果,其中对对象和背景的灰度值进行猜测,然后在每次迭代中根据猜测调整阈值。图©是应用灰度级直方图方法[A threshold selection method from gray-level histograms,大津法]的结果,其中使用直方图来使原始图像和二值化图像之间的距离平方和最小化。

    • 在这里插入图片描述

    • (a)难以阈值化的图像。(b)使用迭代选择阈值。©使用灰度直方图阈值。(d)使用二维相关设定阈值。(e)“正确”设定阈值。

  • 上图©是使用二维相关方法[Gray-level thresholding of images using a correlationcriterion]的结果,其中应用了所有合理的阈值,每种情况下的阈值图像都与原始图像相关。选择最大相关性对应的阈值。最后,图(e)是基于对图像的手动观察所期望的结果,也是通过下面描述的方法所发现的结果。任何产生单个阈值的方法都不会产生图(e)所示的结果

  • 虽然上图中的图像是人为设计的,但在实际图像中也会由于噪声或非均匀光照等因素而产生类似的效果。线性光照梯度和高斯光照斑点都会产生这个问题。在这些情况下,没有一个单一的阈值能够生成合理的二值图像。另一个原因是,通常单个阈值是不够的,因为物体的反射率可能存在很大差异,因此图像中不同部分的物体可能比(或比背景)更亮(或更暗)。如果再加上光照效果,就会得到无法通过常规方法进行阈值化的图像。如果单个阈值不可接受,那么剩下的选择就是在图像的每个小子区域使用多个阈值。子区域的最大数量与图像中的像素数相同;此外,任何更大的区域都可能因光照效果而发生扭曲,尽管扭曲程度比整个图像要小。制定阈值化方法的起点可以是为每个像素选择不同的阈值。该方法将根据图像的局部特性来确定这些阈值。随着与已知像素点的距离增大,我们对局部阈值的信任度会降低

  • 所提出的阈值化方法首先通过使用灰度梯度来定位图像中的“物体”,然后记录图像中各个区域与“物体”相对应的灰度级,最后将这些灰度级作为初始阈值的猜测。然后使用局部图像特性为图像的其余部分分配阈值 。该方法能够对在不同光照条件下生成的图像进行阈值化。

INTENSITY GRADIENT BASED THRESHOLDING

  • 阈值化处理的目的是提供一幅二值图像,以区分图像中的对象与背景。因此,了解对象的大致位置及其灰度值将很有用。这些位置周围的区域可以作为该区域附近阈值的初始猜测值。众所周知的同态滤波操作包含一个在这方面有用的想法。该操作基于以下原则:图像中的对象提供了高空间频率分量,而照明主要由较低的空间频率分量组成,两者相乘生成原始图像。该滤波器试图通过滤除低频分量来最小化照明效应。如果存在一个基于周围物体照明条件的光照分量(I),以及一个基于图像中物体特性的反射分量(R),那么合成图像(C)就是 R 乘以 I 的积。因此,C的对数为 ln® + ln(I)。如果 I 主要包含低空间频率分量,那么高通滤波器将从 ln© 中去除部分ln(I)。这通常是这种情况。

  • 另一种看待这个问题的方法是说,图像中的物体会产生小的区域,其强度梯度相对较大,这些区域位于物体的边界附近,而其他区域的梯度相对较小。这一事实被许多边缘增强算法所利用。通过寻找高梯度区域,可以找到图像中物体像素的样本。假设这些像素属于一个在阈值图像中会显得明显的物体。将假设物体为黑色(0),而背景为白色(1或更高),尽管也可以使用相反的情况。

  • 强度梯度通常具有方向性。物体边界附近的像素在朝向边界的方向上的梯度通常比远离边界或平行于边界的方向上的梯度更大。由于处理的是离散图像,因此梯度实际上是沿小距离内的强度差计算得出的。因此,在任何像素处计算强度梯度的方法是找到在指定距离内所有方向上的最大强度差。一个简单的例子是距离为一像素的情况,此时每个邻域的方向数为8。仍然有许多方法可以测量强度梯度,但对于本文的目的来说,一个有用的方法是

    • G ( i , j ) = m i n ( I ( i , j ) − I ( i + δ i , j + δ j ) ) ;   a n d   δ i = − 1 , 1 ; δ j = − 1 , 1 G(i,j)= min(I(i,j)-I(i+ δ_i,j+ δ_j));~and~ δ_i=-1,1;δ_j=-1,1 G(i,j)=min(I(i,j)I(i+δi,j+δj)); and δi=1,1;δj=1,1
  • 在这个过程中,图像 I 被用来计算差异图像G。这是非定向的,在边界像素和对象内部某些像素处会产生较大的负梯度。下图展示了该过程在上图的示例图像中的应用。不出所料,梯度图像中最强烈的像素是 I 形区域边界上的像素。下图的梯度图像中的像素值很特殊,因为背景区域的对应区域的值为0或接近0。这并非总是如此。噪声、变化的光照和其他效应通常会生成具有正负值的背景梯度。下图还具有这样的特性,即梯度图像有一个单一的阈值,成功地定位了所有对象像素。这是因为该图像中的所有像素都属于边缘。许多图像不具有这种特性。在那些情况下,边缘像素给出了剩余像素的局部阈值估计,可以通过使用边缘值对其进行阈值化。当寻找具有大梯度的对象像素时,问题是:多大才足够大?这相当于对梯度图像进行阈值化处理,即将原始问题应用于不同的图像上。

    • 在这里插入图片描述

    • Intensity gradient image.

  • 因为梯度图像的绝对值仅在边缘像素处较大,而大多数图像中的边缘像素只占总像素数的一小部分,因此梯度图像中的像素值的标准差小于相应灰度图像的标准差。边缘像素的较大梯度使其在背景中更加突出,更容易定位。实际上,结果表明,梯度图像通常可以使用全局阈值进行阈值化。然而,梯度图像在某种程度上受到光照的影响,当存在噪声时,全局阈值可能并不完全适用。一种可以使用梯度图像选择对象边缘像素的方法是使用小的梯度图像子区域来找到局部均值/偏差。这与Wall[The gray level histogram for threshold boundary determina-tion in image processing with applications to the scene segmentationproblem in human chromosome analysis]和[Automatic systems for chomosome identi-fication]中使用的自适应阈值化技术类似,其中将染色体图像分为较小的区域,在这些区域中单个阈值有效。它也类似于Chow和Kaneko[Automatic boundary detectionof theleft ventricle from cineangiograms]用于增强心电图边缘的阈值化方法。区域必须足够小,以便可以忽略光照效果。这个过程只应用于梯度图像,以努力考虑光照对灰度梯度的影响。实际上,建立了照明的二维模型,并用于寻找局部阈值

  • 然后使用邻域平滑区域均值,以说明图像中的低梯度(接近恒定的灰度级)区域。这给出了梯度变化的地图,作为图像中位置的函数。最后,将这些值插值到像素级,在图像的所有位置给出一个合理的梯度值;任何超过该值超过三个标准差的像素将被认为是边缘像素,相应的灰度像素被归类为目标像素,例如,考虑一个宽度为256像素,高度为256像素的图像,如下图(a)所示。计算梯度图像,并给定这些值的16 x 16数组,计算每个16像素× 16像素区域的均值和偏差。这给出了上面的每个条目代表一个分区的平均梯度。现在,通过将每个值替换为相邻值的加权平均值,可以对上面的值进行平滑处理。所使用的权重是给考虑的像素最大的权重,而给相邻像素较小的权重与距离成比例。对梯度区域进行平滑处理的结果为:

    • 在这里插入图片描述

    • (a)手印文本。(b)键入文本。©肖像。(d)条染色体。

  • 现在假设这些值中的每一个对于各自区域的中心像素都是正确的,并且执行线性插值以在每个像素处产生具有计算值的新梯度图像。平滑和插值对整个图像的影响可以用照明和图像在平滑前后(仅照明,处理前,处理后)的线形图来显示。

    • 在这里插入图片描述
  • 16 × 16的区域大小有些随意,实际上应该是光照分布的函数。当使用较小的区域时,更高的照明梯度会产生更好的阈值图像。事实上,16 × 16的尺寸对于所有照明测试都是完全可以接受的,其中梯度不会被照明效果所淹没。例如,下面是一组使用8,16,32和64像素的区域大小进行阈值处理的图像:

    • 在这里插入图片描述
  • 在对象中找到样本对象像素后,下一步是确定剩余图像像素的阈值,通常是绝大多数尚未表征的图像像素。这可以使用基于局部环境灰度的区域增长程序来完成,并从已知属于对象的像素开始。虽然可以使用许多区域增长程序,但用于生成图中图像的区域增长程序使用已知目标像素的灰度级别作为所有近邻的阈值。任何灰度值小于相邻目标像素的像素都被归类为目标像素。这个过程在整个图像上重复,直到没有新的对象像素被发现,结果是一组像素几乎肯定属于一个对象,尽管一些对象像素从集合中丢失

    • 在这里插入图片描述

    • 线性照明中CORR和LIG的比较。(a)手印文本-CORR。(b)手印文本LIG。©输入文本-CORR。(d)输入文本-LIG。(e)肖像——CORR。(f)肖像 - LIG.(g) chromosomal corr. (h)Chromosomes-LIG。

  • 为了完成像素集,可以再次重复扫描图像,但这次使用所有相邻对象像素的平均值为每个未分类像素设置阈值。这将产生一个更完整的集合,但也允许错误地包含一些背景像素。要求至少四个相邻对象像素可以减少此错误。最后,可以再次扫描图像,如果任何未分类的像素有6个或更多的对象像素作为邻居,则使用object pixels 的最大值作为阈值。这样做的目的是填充对象区域内部的像素。同样,一些背景像素可能分类不当。虽然使用子区域给出局部梯度阈值会得到很好的结果,但在许多情况下,将单个梯度阈值应用于整个图像几乎同样有效。作为比较的基础,测试了一种将灰度直方图(GLH)方法应用于梯度图以给出阈值的方法;所选像素的灰度级别用作区域生长过程的种子值

IMPLEMENTATION

  • 上面描述的阈值方法(从现在起称为局部强度梯度(LIG)方法)是在运行UNIX的Sun4主机上用C语言实现的。LIG的摘要如下。
    • 步骤1:对于图像(IM1)中的所有像素,计算像素与所有八个相邻像素之间的最小差异。这可以保存在另一个图像中:称之为IM2。
    • 步骤2:将IM2分解为N × N个子区域。计算每个子区域的平均值(QIM)和平均偏差(QDEV)。
    • 步骤3:使(QIM)和QDEV都平滑。每个点的QIM值被所有相邻子区域的加权平均值所取代,QDEV也是如此。
    • 步骤4:再次在N × N区域内插入/外推 (QIM) 和QDEV的值。线性插值是可以接受的。这将得到一个大小为 IM2 的图像,其中包含每个像素的梯度和偏差估计。
    • 步骤5:对于IM2的所有像素[i,j]:
      • 如果QIM[i,j]≥-1或QDEV[i,j]≥-1,则像素[i,j]保持未分类状态。(区域为flat/常量。)
      • 如果 IM2[i,j]≤QIM[i,j]+ 3*QDEV[i,j] 则 pixel[i,j] 为目标像素(选择目标像素)。
      • 否则[i,j]为未分类。
    • 步骤6:对于所有未分类像素[i, j],通过在相邻(8个邻居)对象像素中寻找最小的灰度值(像素聚合)来选择灰度阈值。如果IM1[i, j]小于此值,则为对象像素。重复步骤6,直到不再找到对象像素
    • 步骤7:(可选) 对于所有仍然未分类的像素,计算至少四个相邻对象像素的平均值作为阈值(区域增长)。重复步骤7,直到没有发现新的对象像素。
    • 步骤8:(可选)对于所有仍然未分类的像素,计算一个阈值,作为至少六个相邻对象像素的最大值(区域增长)。重复步骤8,直到没有发现新的对象像素。
    • 步骤9:将 IM1中的所有对象像素移至0,将所有未分类像素移至正值。IM1 现在包含阈值图像。
  • 在像素聚合步骤之后,该过程可以被认为是完成的,但是区域生长过程通常会产生更好的结果。

RESULTS AND CONCLUSIONS

  • 在三种不同光照效果下,将LIG方法与迭代选择(IS)、灰度直方图(GLH)和两种基于相关性的算法(CORR)进行了比较。因为这会产生大量的阈值图片(180),所以这里只显示其中的一些结果。事实上,由于IS、GLH和CORR产生的图像几乎相同,因此将只显示CORR的结果。下图显示了将用于说明LIG和corr阈值方法的四幅图像样本集。

    • 在这里插入图片描述

    • (a)手印文本。(b) Typedtext。©肖像。(d)条染色体。

  • 这四幅图像可以用任意一种方法进行合理的阈值分割,结果具有可比性。阈值图像(使用CORR)出现在上文图中,可用于与这些图像的光照较差版本的阈值进行比较。人工提供照明效果:编写程序对数字图像应用线性照明(下图)和高斯光斑(下第二图)。然后将所有的阈值分割方法应用于这些改变后的图像。同样,IS、GLH和CORR产生相似的结果,因此将只显示CORR图像。

    • 在这里插入图片描述

    • 添加线性照明梯度的样本图像(a)手印(b)打字©肖像(d)染色体。

    • 在这里插入图片描述

    • 添加高斯照明梯度的样本图像。(a)手印文本(b)打字文本©肖像(d)染色体

  • 上文 线性照明中CORR和LIG的比较 图显示了由上第一图中的线性照明图像得到的CORR和LIG的阈值图像。请注意,corr的全局阈值导致每张图像的很大一部分被认为是黑色的;这仅仅是由于照明梯度。LIG的结果没有显示出这个问题,高斯图像,当使用CORR阈值时,显示一个阈值良好的中心区域,周围是一个没有细节的暗区域。这也是光效应单独造成的结果。当使用LIG时,整个图像中的细节变得可见。当然,当光照梯度变得太大时,LIG方法也将不起作用。如果两个相邻像素之间的光照差与物体边缘的梯度差异不显著,则图像无法阈值

  • 此外,就LIG而言,阴影和大多数其他阈值保持方法都是对象,因为阴影的照明梯度与对象边缘的梯度相同。使用单个梯度图像阈值对测试图像进行阈值分割的结果如下图所示。而图像继续显示一些照明的影响,结果是足够的,在下图中,图像有一个高斯照明强加于他们,这些可以与图中的结果进行比较。对许多样本的观察表明,大多数图像都可以用更简单的方法阈值化。总的来说,LIG 方法虽然比其他方法需要更长的时间,但正确的阈值更大的图像集,目前它被用于 DNA 测序凝胶的分割和手印字符识别实验

    • 在这里插入图片描述

    • Results of using a single gradient threshold.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统之部署RSS阅读器yarr

Linux系统之部署RSS阅读器yarr 一、yarr介绍1.1 yarr简介1.2 yarr使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、部署Node.js 环境4.1 下载Node.js安装包4.2 解压Node.js安装包4.3 创建软链接…

FreeRTOS的任务理论

文章目录 2 FreeRTOS的任务理论2.1 任务及任务优先级2.2 任务状态理论2.2.1 任务状态的转换2.2.2 任务状态改变相关函数2.2.3 调度器相关函数 2.3 FreeRTOS延时2.3.1 vTaskDelay延时2.3.2 vTaskDelayUntil延时2.3.3 pdMS_TO_TICKS(x)宏 2.4 TCB任务控制块…

安卓微商大师V3.4.0/高级版一键群发僵尸粉检测

一款高效获取客源,备受好评的微商工具,资源丰富,秒速获得客源,大量群客源,都是散客,携手创业,是做微商生意的首选工具。打开即是黑钻高级会员 赶快体验吧 很强大 链接:https://pan.…

【实践总结】Python使用Pandas 读取Excel文件,将其中的值转换为字符串的方法

假设你的Excel的列有一行是这个样子的; 如果直接解析就会按照float字段处理,所以现在需要将他们按照字符串去读取出来。正确的做法如下说生意 import pandas as pddf pd.read_excel(ExcelPath, sheet_nameSHEET,dtype{Version: str})在这里我们使用的方法就是dtyp…

专门看电视的app有什么?9款免费看片追剧神器,尽享电视乐趣!(亲测有效)

今天又来跟大家聊聊那些让人眼前一亮的追剧app和电视直播软件,宅家必备呀! 咱们这回不聊那些老掉牙的,来点新鲜的,让咱们的看剧电视屏幕也能跟上潮流,享受一下科技带来的便利和乐趣。 首先,得提一提央视频…

配电智能网关赋能电力系统智能化运行维护

随着智能电网和物联网技术的不断发展,两者之间的融合应用成为电力行业的重要趋势。配电智能网关作为连接两者的关键设备,在智能电网的物联网应用中发挥着重要作用。 配电智能网关能够实现对电力系统的实时监控、数据采集、远程控制等功能,为…

注意!!2024《信息系统监理师》易混淆知识点来了,赶紧收藏

宝子们,在复习软考信息系统监理师中,是不是觉得有很多知识点含义比较相近,很多友友刚看的时候估计会像我一样迷迷糊糊的,作为一个软考老鸟,在这里给大家整理了信息系统监理师学习过程中易混淆的知识点,大家…

山东益康,聚焦绿葆医院场景媒体,用爱服务人类健康

山东益康集团创建于1983年,发展成为集药品研发生产、销售、特医功能食品、精细化工、医疗防护产品等多产业经营为一体的省级企业集团。益康集团紧跟国家发展战略,满足民众日益增长的健康需求,将食品生产向特医保健功能食品转型升级&#xff0…

Windows PowerShell 添加新配置文件(打开对应的目录,并执行命令)

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe ./redis-server.exe %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe yarn dev 人工智能学习网站 https://chat.xutongbao.top

【C语言】刷题笔记 Day1

多刷题 多思考 【题目1】 实现字母的大小写转换,实现多组输入输出 1. getchar 为输入函数,EOF(end of file)为文件结束标志,通常为文件结束的末尾。 2. 题目中要求实现多组输入输出,那我们用 while 循…

2024 年江西省研究生数学建模竞赛题目 B题投标中的竞争策略问题---完整文章分享(仅供学习)

问题: 招投标问题是企业运营过程中必须面对的基本问题之一。现有的招投标平台有国家级的,也有地方性的。在招投标过程中,企业需要全面了解招标公告中的相关信息,在遵守招投标各种规范和制度的基础上,选择有效的竞争策…

武汉凯迪正大—冲击电流成套试验设备 雷电冲击电流发生器 成套雷电冲击装置

适用范围 本发生器适用于36kV及以下避雷器大电流试验、避雷器雷电流残压试验。 技术指标 1. 系统技术参数 1.标称电压:300kV 2.额定级电压:150kV 3.额定能量:45kJ 4.冲击电容量:75k/2uF*8台 5.总级数:2级 6.输…

指哪打哪,重绘神器!我已出手…

最近AI界又爆出了一个大新闻,阿里巴巴、香港大学和蚂蚁集团的研究人员联合推出了一款超厉害的AI工具——MimicBrush,它的问世,无疑给图像编辑领域带来了一场革命,它就像魔法师手中的魔杖,轻轻一挥,就能让图…

持续部署的7个陷阱及其避免方法

什么是持续部署? 持续部署是一种软件开发实践,其中代码更改会自动部署到生产中,无需开发人员或运营团队的明确批准。这实现了从开发到部署的完全自动化流程,确保新功能、错误修复和更新能够快速提供给最终用户。通过将此流程集成…

工业数据分析要用FusionInsight MRS IoTDB ?

随着工业互联网逐步兴起,在加速工业自动化、智能化的同时,也进一步加速工业生产时间序列数据的产生速度。但对于工业生产中的数据分析,仍然存在重复样本多,数据膨胀率大,缺乏专业易用的平台,这些问题成为阻…

2018年全国大学生数学建模竞赛A题高压油管的压力控制(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码问题1(1)绘制弹性模量与压力函数图(2)求最优单次开阀时间 问题二(1)极径与极角关系(2)求最优凸轮角速度 四、完整word版论文和源代…

数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)

数据库管理213期 2024-06-25 数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)1 索引1.1 B-Tree索引1.2 Hash索引1.3 复合索引1.4 唯一索引1.5 表达式索引1.6 部分索引 2 视图3 表连接3.1 内连接3.2 左/右外连接3.3 全连接清理环境: …

OpenSearch的演进与语义检索技术革新

周末听了一场关于Open Search的技术分析,整理如下,供大家参考。OpenSearch,作为ElasticSearch的一个分支,不仅继承了其强大的搜索和分析能力,更在开源社区的驱动下,不断演进和创新。本文将介绍OpenSearch的…

年轻人「入侵」厂货电商:泼天的富贵or甜蜜的烦恼?

【潮汐商业评论/原创】 “明天我们带个黑色塑料袋,假装是批发拿货的,看看能不能淘到好货。这个批发‘黑话’你也学一下,别到时候露馅。” Paula正兴冲冲地跟Grace计划去服装批发市场“消费”。 只不过,与以往普通进店客人身份不…

免费分享一套SpringBoot+Vue校园求职人才招聘(企业招聘)网站系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue校园求职人才招聘(企业招聘)网站系统,分享下哈。 项目视频演示 【免费】SpringBootVue校园求职人才招聘网站(企业招聘)网站系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBo…