机器学习——数字图像与机器视觉基础

6本值得收藏的数字图像处理书籍! 在这个看脸的时代,颜值就是一切。怎样可以成为控制颜值的“黑魔法师”?相信,阅读以下这些经典的图像处理书籍能够助你一臂之力。赶紧紧随大圣众包威客平台的脚步吧! 《数字图像处理基础》   随着台式计算机的处理能力日益增强,各种图像拍摄的设备(例如平板电脑、手机摄像头、数码相机、扫描仪等)的普及,以及互联网的加持,使得数字图像处理变得与文字处理一样普及。本书就数字 阅读详情

一、bmp图像浅析

  • 准备一张图片
    在这里插入图片描述
  • 利用ps将其保存为32位、16位彩色和256色、16色、单色的位图(BMP)文件
    在这里插入图片描述
  • 分别查看这些图片信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 分析位图文件头(以32位为例)
    在这里插入图片描述
    位图文件头分四部分,共14字节
名称占用空间内容实际数据
bfType2字节标识,就是“BM”二字BM
bfSize4字节整个BMP文件的大小0x0046b438(4633656)
bfReserved1/24字节保留字,占位0x00000000
bfOffBits4字节偏移数,即 位图文件头+位图信息头+调色板 的大小0x00000036(54)

注意,Windows的数据是倒着念的,这是PC电脑的特色。如果一段数据为50 1A 25 3C,倒着念就是3C 25 1A50,即0x3C251A50。因此,如果bfSize的数据为38 b4 46 00,实际上就成了0x0046b438。彩色表/调色板(color table)是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像 的数据是指向调色板的索引。

  • 分析位图信息头
    在这里插入图片描述
    位图信息头分十一部分,共40字节
名称占用空间内容实际数据
biSize4字节位图信息头的大小,总为400x28(40)
biWidth4字节位图的宽度,单位是像素0x400(1024)
biHeight4字节位图的高度,单位是像素0x300(768)
biPlanes2字节目标绘图设备包含的层数,固定值11
biBitCount2字节每个像素的位数1-黑白图,4-16色,8-256色,24-真彩色0x10(16)
biCompression4字节压缩方式,BI_RGB(0)为不压缩0
biSizeImage4字节位图全部像素占用的字节数,BI_RGB时可设为00x018000
biXPelsPerMeter4字节水平分辨率(像素/米)0x0b13
biYPelsPerMeter4字节垂直分辨率(像素/米)0x0b13
biClrUsed4字节位图使用的颜色数如果为0,则颜色数为2的biBitCount次方0
biClrImportant4字节重要的颜色数,0代表所有颜色都重要0
  • 位深度=通道数* 每个通道所占位数。
    • 我们所说的灰度图和二值化的图像都是单通道图片。
      灰度图的位深度为1* 8=8.
      二值化图像的位深度为1* 1=1.
      单通道图片,每个像素点的数值表示了黑的程度。
    • 8位: 2^8 = 2^2(B) 2^3(G) 2^3® = 256 (256色) 可以总共显示256种颜色
      16位:2^16 = 2^5(B) 2^6(G) 2^5® = 65536 可以总共显示65536种颜色
      24位:2^24 = 2^8(B) 2^8(G) 2^8® = 16777216 可以总共显示16777216种颜色
      32位:Alpha透明度 + 24位
    • 当8/16位深度时,单个原始颜色 (R/G/B)最大只能表示为(0~ 2^3)/(0~ 2^6), 无法满足(0~0xff)的范围,所以显示的颜色范围有限。
      当24位深度时,使用24bit显示一个像素点, 由8bit Red 8bit Green 8bit Blue组合颜色而成,每一个原始颜色(R/G/B)都可以完全显示(0~0xff),所以24位及以上,我们就叫做真彩色
      当32位深度时,与24位相同,可以显示所有的颜色,同时多了一个透明度值。
  • 比较
    可以看到,单色图就是色深度为1位的图,16色是色深度为4位的图片,而256色图片则是8位的图片。而随着色深度位数的减小,图片大小也有显著的变小。
  • 将原图jpg转为bmp,png和gif
    在这里插入图片描述
    可以看到图片大小bmp>png>gif>jpg。

二、用奇异值分解对图片进行降维处理

  • 打开anaconda,运行代码
import numpy as np
import os
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib as mpl
from pprint import pprint


def restore1(sigma, u, v, K):  # 奇异值、左特征向量、右特征向量
    m = len(u)
    n = len(v[0])
    a = np.zeros((m, n))
    for k in range(K):
        uk = u[:, k].reshape(m, 1)
        vk = v[k].reshape(1, n)
        a += sigma[k] * np.dot(uk, vk)
    a[a < 0] = 0
    a[a > 255] = 255
    # a = a.clip(0, 255)
    return np.rint(a).astype('uint8')


def restore2(sigma, u, v, K):  # 奇异值、左特征向量、右特征向量
    m = len(u)
    n = len(v[0])
    a = np.zeros((m, n))
    for k in range(K+1):
        for i in range(m):
            a[i] += sigma[k] * u[i][k] * v[k]
    a[a < 0] = 0
    a[a > 255] = 255
    return np.rint(a).astype('uint8')


if __name__ == "__main__":
    A = Image.open("C:\\Users\\Leon_D_Alan\\OneDrive\图片\\ps专用图片副本\\碧翠丝.png", 'r')
    print(A)
    output_path = r'C:\\Users\\Leon_D_Alan\\OneDrive\图片\\ps专用图片副本\\SVD_Output'
    if not os.path.exists(output_path):
        os.mkdir(output_path)
    a = np.array(A)
    print(a.shape)
    K = 50
    u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])
    u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])
    u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])
    plt.figure(figsize=(11, 9), facecolor='w')
    mpl.rcParams['font.sans-serif'] = ['simHei']
    mpl.rcParams['axes.unicode_minus'] = False
    for k in range(1, K+1):
        print(k)
        R = restore1(sigma_r, u_r, v_r, k)
        G = restore1(sigma_g, u_g, v_g, k)
        B = restore1(sigma_b, u_b, v_b, k)
        I = np.stack((R, G, B), axis=2)
        Image.fromarray(I).save('%s\\svd_%d.png' % (output_path, k))
        if k <= 12:
            plt.subplot(3, 4, k)
            plt.imshow(I)
            plt.axis('off')
            plt.title('奇异值个数:%d' % k)
    plt.suptitle('SVD与图像分解', fontsize=20)
    plt.tight_layout()
    # plt.subplots_adjust(top=0.9)
    plt.show()

在这里插入图片描述
当奇异值越少,图片越模糊。

三、采用图像的开闭运算,检测出2个样本图像中硬币、细胞的个数

  • 处理过程:读取图片–>转为灰度图片–>二值化–>腐蚀–>膨胀–>找中心点–>标识–>显示
  • 硬币识别代码
import cv2
import numpy as np

def stackImages(scale, imgArray):
    """
        将多张图像压入同一个窗口显示
        :param scale:float类型,输出图像显示百分比,控制缩放比例,0.5=图像分辨率缩小一半
        :param imgArray:元组嵌套列表,需要排列的图像矩阵
        :return:输出图像
    """
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
                else:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
                                                None, scale, scale)
                if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
        imageBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imageBlank] * rows
        hor_con = [imageBlank] * rows
        for x in range(0, rows):
            hor[x] = np.hstack(imgArray[x])
        ver = np.vstack(hor)
    else:
        for x in range(0, rows):
            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
            else:
                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
        hor = np.hstack(imgArray)
        ver = hor
    return ver


#读取图片
src = cv2.imread("1.png")
img = src.copy()

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#二值化
ret, img_2 = cv2.threshold(img_1, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

#腐蚀
kernel = np.ones((20, 20), int)
img_3 = cv2.erode(img_2, kernel, iterations=1)

#膨胀
kernel = np.ones((3, 3), int)
img_4 = cv2.dilate(img_3, kernel, iterations=1)

#找到硬币中心
contours, hierarchy = cv2.findContours(img_4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]

#标识硬币
cv2.drawContours(img, contours, -1, (0, 0, 255), 5)

#显示图片
cv2.putText(img, "count:{}".format(len(contours)), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(src, "src", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_1, "gray", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_2, "thresh", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_3, "erode", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_4, "dilate", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
imgStack = stackImages(1, ([src, img_1, img_2], [img_3, img_4, img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)

在这里插入图片描述

  • 硬币识别代码
import cv2
import numpy as np

def stackImages(scale, imgArray):
    """
        将多张图像压入同一个窗口显示
        :param scale:float类型,输出图像显示百分比,控制缩放比例,0.5=图像分辨率缩小一半
        :param imgArray:元组嵌套列表,需要排列的图像矩阵
        :return:输出图像
    """
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
                else:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
                                                None, scale, scale)
                if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
        imageBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imageBlank] * rows
        hor_con = [imageBlank] * rows
        for x in range(0, rows):
            hor[x] = np.hstack(imgArray[x])
        ver = np.vstack(hor)
    else:
        for x in range(0, rows):
            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
            else:
                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
        hor = np.hstack(imgArray)
        ver = hor
    return ver


#读取图片
src = cv2.imread("1.png")
img = src.copy()

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#二值化
ret, img_2 = cv2.threshold(img_1, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

#腐蚀
kernel = np.ones((20, 20), int)
img_3 = cv2.erode(img_2, kernel, iterations=1)

#膨胀
kernel = np.ones((3, 3), int)
img_4 = cv2.dilate(img_3, kernel, iterations=1)

#找到硬币中心
contours, hierarchy = cv2.findContours(img_4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]

#标识硬币
cv2.drawContours(img, contours, -1, (0, 0, 255), 5)

#显示图片
cv2.putText(img, "count:{}".format(len(contours)), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(src, "src", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_1, "gray", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_2, "thresh", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)
cv2.putText(img_3, "erode", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)
cv2.putText(img_4, "dilate", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)
imgStack = stackImages(1, ([src, img_1, img_2], [img_3, img_4, img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)

在这里插入图片描述

四、采用图像梯度、开闭、轮廓运算等,对图片中的条形码进行定位提取;再调用条码库获得条码字符

  • 这里要用到imutils包和pyzbar包,打开Anaconda Prompt使用以下命令安装
pip install imutils

pip install pyzbar
  • 代码
import cv2
import numpy as np
import imutils
from pyzbar import pyzbar
def stackImages(scale, imgArray):
    """
        将多张图像压入同一个窗口显示
        :param scale:float类型,输出图像显示百分比,控制缩放比例,0.5=图像分辨率缩小一半
        :param imgArray:元组嵌套列表,需要排列的图像矩阵
        :return:输出图像
    """
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
                else:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
                                                None, scale, scale)
                if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
        imageBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imageBlank] * rows
        hor_con = [imageBlank] * rows
        for x in range(0, rows):
            hor[x] = np.hstack(imgArray[x])
        ver = np.vstack(hor)
    else:
        for x in range(0, rows):
            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
            else:
                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
        hor = np.hstack(imgArray)
        ver = hor
    return ver


#读取图片
src = cv2.imread("C:\\Users\\28205\\Documents\\Tencent Files\\2820535964\\FileRecv\\txm.jpg")
img = src.copy()

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#高斯滤波
img_2 = cv2.GaussianBlur(img_1, (5, 5), 1)


#Sobel算子
sobel_x = cv2.Sobel(img_2, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img_2, cv2.CV_64F, 0, 1, ksize=3)
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.convertScaleAbs(sobel_y)
img_3 = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

#均值方波
img_4 = cv2.blur(img_3, (5, 5))

#二值化
ret, img_5 = cv2.threshold(img_4, 127, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

#闭运算
kernel = np.ones((100, 100), int)
img_6 = cv2.morphologyEx(img_5, cv2.MORPH_CLOSE, kernel)

#开运算
kernel = np.ones((200, 200), int)
img_7 = cv2.morphologyEx(img_6, cv2.MORPH_OPEN, kernel)

#绘制条形码区域
contours = cv2.findContours(img_7, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = imutils.grab_contours(contours)
c = sorted(contours, key = cv2.contourArea, reverse = True)[0]
rect = cv2.minAreaRect(c)
box = cv2.cv.BoxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], -1, (0,255,0), 20)

#显示图片信息
cv2.putText(img, "results", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_1, "gray", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)
cv2.putText(img_2, "GaussianBlur",(200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)
cv2.putText(img_3, "Sobel", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_4, "blur", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_5, "threshold", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_6, "close", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)
cv2.putText(img_7, "open", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 3)

#输出条形码
barcodes = pyzbar.decode(src)
for barcode in barcodes:
    barcodeData = barcode.data.decode("utf-8")
    cv2.putText(img, barcodeData, (200, 600), cv2.FONT_HERSHEY_SIMPLEX, 5.0, (0, 255, 0), 30)

#显示所有图片
imgStack = stackImages(0.8, ([img_1, img_2],[img_3,img_4],[img_5,img_6],[img_7,img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)

在这里插入图片描述

五、总结

在检测图中细胞个数时,效果没有检测硬币那么好,这与图片中某些细胞颜色较浅,转换为灰度图片后,与周围颜色分辨不明显有关。条形码的识别也不是很精准。


参考文献

https://blog.youkuaiyun.com/csdn66_2016/article/details/82850695
https://blog.youkuaiyun.com/qq_41881259/article/details/106441768
https://blog.youkuaiyun.com/qq_45659777/article/details/121698713

图像处理与机器视觉 图像处理(Image Processing)是对图像进行分析、增强、变换等操作以改善图像质量或提取有用信息的过程。它通常涉及数字图像处理技术,包括滤波、边缘检测、图像分割、特征提取等。图像处理的目标可以是增强图像的视觉效果,或者使图像更适合于某种特定的机器分析。图文处理,就像是给照片和文档“化妆”和“打扮”一样。它可不是简单的涂抹或者穿衣搭配,而是需要掌握一系列“魔法技巧”,让图片和文字变得更加吸引人。想象一下,你有一张平淡无奇的照片,但是通过图文处理,你可以给它加上滤镜,让它瞬间变得鲜艳动人; 阅读详情

相关推荐

为何pytorch预训练的resnet模型对输入图片的大小无要求?

原本的ResNet18模型对于输入的训练图像是有严格的大小限制的,规定的大小为224*224。但是最近发现Pytorch中预训练的resnet模型时,输入图片的大小为200*200或者是其他尺寸时也可以。 于是就好奇到底是什么原因。 1,RESNET-18网络图示理解 17个卷积层(conv)+1个全连接层(fc) 提示: BN 就是批量归一化 RELU 就是**函数 lambda x:x 这个函数的意...

thequitesunshine007的博客 1万+

机器学习 day01(四)

手写体数字识别 与ipynb文件夹同级的data文件夹下有10个文件, 每个文件中都是手写体数字的图片 1. 导入绘图模块,查看图片 先读取一张图片,图片为28x28像素 2. 读取文件所有的手写体数字图片 这是一个三维数组,总共有5000张图片 3. 模型训练 3.1 sklearn的算法只接受二维以下的数组 所以不能直接训练 3.2 使用reshape()函数将数组由三维变成二维 d...

沉觞的博客 549

MATLAB实现简单物体特征识别完整教程

机器视觉是利用计算机模拟人类视觉系统,通过图像处理和模式识别技术来分析和解释视觉信息。它广泛应用于制造业质量检测、医疗影像分析、自动驾驶、安全监控等多个领域,是现代工业自动化的关键技术之一。物体特征指的是能够代表物体特性的信息,是物体区别于其他物体的标志。这些特征可以是形状、纹理、颜色、尺寸等,它们共同构成了物体的描述。在机器视觉中,特征提取是将原始图像数据转换为有意义的特征集的过程,是计算机视觉和模式识别中的关键步骤。根据不同的应用领域和目标,特征的分类可以非常多样。

weixin_36311421的博客 1026

什么是图像的位深度

图像的位深度决定了每个像素可以表示的颜色或灰度级数。位深度越大,图像的颜色范围和灰度精度越高,同时文件大小也会增加。常见的图像位深度包括 1 位、8 位、16 位、24 位和 32 位,每种位深度适用于不同的应用场景。

游客520 2658

数字图像处理与机器视觉源码实战

本文还有配套的精品资源,点击获取 简介:本源码集合涵盖了数字图像处理与机器视觉的各个方面,从基础的图像操作到机器学习算法应用。通过一系列MATLAB示例代码,你可以学习和实践图像读取、变换、滤波、分割等基础知识,以及特征提取、目标检测、图像配准、图像识别等机器视觉进阶技术。MATLAB环境的友好界面和强大的工具箱使图像分析和模型训练变得简单,为你的项目开发或研究提供宝贵的资...

weixin_26907223的博客 1316

数字图像处理与机器视觉的实践教程:Visual C++与Matlab代码实现第二版

Matlab是MathWorks公司开发的一款高性能的数值计算环境和第四代编程语言。它广泛应用于各种领域,特别是在图像处理、数据可视化、算法开发等方向。要在计算机上使用Matlab,首先要进行安装。Matlab支持Windows、macOS和Linux等主流操作系统。安装过程包括选择安装组件、配置路径、接受许可协议等步骤。

weixin_42309599的博客 633

灰度级和位深度的理解

数字图像的灰度级: 图像中的每个像素由多少位来表示,1位的灰度级为2,2位表现的灰度级为4,8位的灰度级为256,16位的灰度级为65536.灰度级越高,图形的色彩越丰富,图像越平滑。 ...

csdn_gddf102384398的博客 9982

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

神经网络与深度学习 Class 6 :数字图像基础

6.1 数字图像基本概念 数字图像:连续的图像数字化、离散化之后的图像,是对连续图像的一种近似 像素:图像的最小单位 位图:记录每个像素值来存储和表达的图像 色彩深度/位深度:位图中每个像素点要用多少个二进制位表示 BMP格式:Windows系统标准位图格式 ·二值图像(仅有两种颜色的图像) 每个像素只有两种可能取值,使用1位二进制表示,位深度为1 ·灰度图像 每个像素使用一个字节表示,位深度为8(0为黑色,255为白色) ·彩色图像 每个像素都有红、绿、蓝三个分量 每个像素点使用.

m0_49939117的博客 306

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

跟着团子学SAP PS:项目计划成本与项目预算设计思路

​在做SAP PS模块概览培训的时候,很多时候都会用到下面的一页PPT片子讲到项目计划成本与预算的关系,但真正这幅片子想表达的具体内容甚至大部分PS顾问也是无法阐明清楚的。 而SAP PS的设计其实是在丰富的项目管理学的基础上而开展的,所以今天从业务上结合SAP中的功能点讲一下项目成本计划及预算的逻辑。 在项目管理的十大知识领域中,项目成本管理主要是包括为使项目在批准的预算内完成而对成本进行规划...

Lucas1211的博客 3万+

土肥圆的并行学习日记

研究生入学已经半个多月,看到课题组师兄们这段时间纷纷忙着秋招找工作,想到自己一年后也要面对,倍感焦虑,真的巨后悔读了个两年制的专硕(年少无知啊!以为两年学制就是两年后找工作),但是后悔是没有用的哈哈,只能抓紧这一年时间打好基础,等找工作了爱咋咋地吧。。之所以开始写博客,既是希望记录自己学习过程当中的收获,感受不同时间对某一些问题的理解的深入,当然也希望鞭策自己,让自己有一种紧迫感。 本人研究生的方...

qq_41006105的博客 238

机械臂速成小指南(七):从旋转矩阵到齐次变换——机械臂位姿的数学表达

本文详细介绍了机械臂位姿描述的数学基础,包括旋转矩阵、欧拉角和齐次变换等核心概念。通过解析旋转矩阵的几何意义和合成方法,以及欧拉角的直观描述,帮助读者理解机械臂位姿的数学表达。文章还探讨了齐次变换在工程实践中的应用,并提供了数值稳定性、坐标系约定和计算效率等实用建议。

cuda7parallel的博客 835

计算机视觉相关书籍

《数字图像处理》冈萨雷斯————基础,必读 《Learning OpenCV》   《图像处理,分析与机器视觉》————经典,注意参考文献     Amazon 5 stars   《计算机视觉》郑南宁————介绍canny算子较详细   《计算机视觉中的数学方法》吴福朝   《机器视觉》Ramesh Jain,Rangachar

lina_suda的博客 962

逆向CarPlay协议时,除了USB主从切换,你还需要注意这3个关键点

本文深入探讨逆向CarPlay协议时的3个关键点,包括MFi协议背景、多通道协同工作机制和协议分析工具的高级过滤技巧。特别解析了USB主从切换后的复杂交互过程,帮助安全研究员和逆向工程师更好地理解CarPlay协议的核心机制与潜在安全研究切入点。

weixin_29164497的博客 381

27、自闭症儿童治疗与玩具设计研究

本研究探讨了自闭症儿童的治疗方法与玩具设计之间的关联,分析了游戏疗法、音乐疗法和职业疗法等在治疗中的应用,并介绍了多种针对自闭症儿童的治疗玩具案例。通过用户研究和多学科合作,提出了以Pro-Ability为核心的设计理念,开发了结合音乐疗法和精细运动训练的智能玩具套件。研究总结了当前成果与局限性,并展望了未来发展方向,旨在为自闭症儿童提供更有效的康复支持。

keras9composer的博客 210

怎样学习图像处理技术?(三)

学习图像处理算法的方法论,我会告诉你结论,也会告诉你原因,当然还有具体的知识和实例,持续更新中,这是第三篇~

tf_zxq的博客 675

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 964

学习资料

学习资料及视觉自主探测学习初步规划 2018.03.31 我们研究的问题,在理论方面主要涉及到以下几个关键词:数字图像处理、卷积神经网络、机器学习、深度学习、机器视觉 针对这几个关键词,如果希望对相关领域的理论知识有所了解的话,有以下学习资料可以参考: 数字图像处理 《数字图像处理》(冈萨雷斯)有两个版本,一个主讲理论基础,另一个主讲matlab实现,这本书主要是讲一些图像...

Ellin_的博客 446

15、电科院FTU检测标准学习笔记-基本性能

作者简介:本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验。

sixtome 1864

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【计算机视觉】数字图像与机器视觉基础

目录一、位图文件分析1. 什么是位图2. BMP位图文件3. BMP文件结构4. 位图文件头5. 位深度6. 不同位深度图像对比二、对比不同文件格式的图片文件大小三、基于奇异值分解(SVD)提取图片特征值四、开闭运算检测图像中硬币和细胞的个数1. 检测硬币数量2. 检测细胞数量五、图片条形码定位总结参考 一、位图文件分析 1. 什么是位图   位图图像(bitmap),亦称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整

YangMax1的博客 6345

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

推荐一些计算机视觉相关的书籍

经常碰到有人问我关于计算机视觉(机器视觉)领域的入门书籍或者相关书籍,下面我就推荐一些自己看的,当然,不见得满足所有人的需求,不过,还是真诚的希望能对你有所帮助。 (1)数字图像处理,冈萨雷斯,阮秋琦(译),电子工业出版社; (2)opencv基础篇,于仕琦,刘瑞祯,北京航空航天大学出版社; (3)Learning OpenCV computer vision with the open

.... 1075

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【数字图像处理】机器视觉基础

西北NW:north-western,东北NE:north-eastern,西南SW:south-western western,东南SE:south-eastern。5、关系结构:信息集中在语义上重要的图像组成部分上,即物体之间的关系上,适合用于高层次的图像理解工作。ML 是具有原始图像分辨率的图像(原始图像),依次降低1倍分辨率得到该图像序列。依据电磁波谱的分布,对不同波段图像反射、透射等图像的生成,即形成了光谱图像。3、行程编码:常用于图像矩阵中符号串的表示,仅记录图像中属于物体的区域。

m0_65787507的博客 997

数字图像与机器视觉基础实例

一、理论基础 ①奇异值分解(SVD)原理与在降维中的应用 转自:奇异值分解(SVD)原理与在降维中的应用 - 刘建平Pinard - 博客园 奇异值分解 奇异值分解(SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。 SVD的定义  SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为: A=...

dedsec0x的博客 885

【深度学习基础】一分钟带你了解:计算机视觉、机器视觉以及数字图像处理的区别

计算机视觉、机器视觉以及数字图像处理之间的区别:计算机视觉包括但不限于以下几种子任务,比如图像分类、物体检测以及图像分割等。机器视觉主要应用于生产线的产品制造过程中,执行某种特定的任务,比如在识别物体加工表面的裂痕、是否正确密封等,因此基于人工设计的图像特征有很大的局限性,往往是针对特定的任务设计的,不具备普遍适用性。数字图像处理是对图像在像素级别的处理,比如图像旋转、增亮、锐化等等操作,这个其实就是平时我们拍照之后的修图。 ...

欢迎时常光顾我的干货超市,热衷于AIoT!! 1806

计算机视觉、机器视觉、数字图像处理、机器学习/深度学习+图像处理 四者的关系

一、机器能进行视觉感知的进化发展(就算机器能识别各种物体用处大吗) 小猫有眼睛,认识吃的就吃,看到危险就躲,还能抓苍蝇。那具有运动能力的机器没有视觉怎么做出决策和会执行。机器拿到数字图像如何提取感知信息(像小猫认识吃,判别危险,感知苍蝇的位置) 人眼感知信息:空间、色彩、形状、运动 1 机器人需要视觉感知 机器人(Robot)是一种能够半自主或全自主工作的智能机器,具有感知、决策、执行等基本特征,可以辅助甚至替代人类完成危险、繁重、复杂的工作,提高工作效率与质量,服务人类生活,扩大或延伸人的活动及能力范围。

weixin_44523062的博客 1万+
上一篇: 使用示波器分析串口通信波形
下一篇: 分别基于IO、NIO、Netty的Java网络程序
羚漆
博客等级 码龄5年 31粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值