western blot蛋白条带灰度值扫描——python

一、原理与思路

图像由无数的像数构成,python读取图片每一像数点的灰度值,从黑-白的灰度值为0~255,即越黑的地方灰度值越小,越白的地方灰度值越大。显然,我们希望越黑的地方灰度值越大,因此需要做一个反转,即用255减去各个像数点灰度值。接着,将所有非条带部分的像数点灰度值改为0,而蛋白条带部分灰度值保持不变。最后,只要识别出每个蛋白条带的区域,将其中所有像数点灰度值和。

图1  示例图像

 

二、python代码

# 导入模块

from numpy import *

from PIL import Image

# 构建一个函数读取灰度值图像

def pictureRead(path):  # path为图片文件路径

    im = array(Image.open(path).convert('L'))

    im = 255 - im  # 黑白灰度值转换

    # 白色部分灰度值转换为0,黑色部分保持原值

    row, col = im.shape

    for i in range(row):

        for j in range(col):

            if im[i,j] < 128:

                im[i,j] = 0

    return im

# 构建一个函数识别蛋白条带区域

def discern(array):

    list = []

    array = 1 * (array > 128) # 转换为二值图像,白色为0,黑色为1

    # 对每一列像素值求和,若与前一列结果不一致则判断为条带边缘

    row, col = array.shape

    for i in range(col):

        if (sum(array[:,i]) == 0) != (sum(array[:,i-1])==0):

            list.append(i)

    return list

# 构建一个函数求和各条带灰度值

def greySum(array, list):

    sumlist = []

    for i in range(len(list)):

        if i % 2 ==0:

            sum = array[:,list[i]:list[i+1]].sum()

            sumlist.append(sum)

    return sumlist

#  运行

if __name__ == '__main__':

    path = r'C:\test.png'

    im = pictureRead(path)

    list = discern(im)

    area = greySum(im,list)

    print(area)

三、代码解析

1)导入模块

程序运行需要导入numpy和PIL模块,如果你的python还未安装这两个模块,程序出错。

2)pictureRead()函数

pictureRead()函数用于读取图像,并进行一些转换操作。这个函数需要您提供一个图像文件路径的字符串参数path(如示例所示),经这一步处理后图像如下:

图2  

图2中,蛋白条带轮廓清晰可见,但是示例图像中第一条很浅的条带消失了,这是函数中把灰度值小于128的像数点都改为0了,所以太浅的条带,此程序可能无法扫描,或者您可以试着把128调低,看看能否把较浅的条带识别出来。

3)discern()函数

discern()函数先将灰度图像转换成二值图像,用于识别条带左右边缘,转换后的二值图像如下:

图3

此函数返回一个列表,此例为:[76, 128, 134, 183, 194, 245, 249, 302],第1、2个值为第一个条带左右边缘的列下标,第3、4个为第二个条带左右边缘的列下标,依次类推。

4)greySum()函数

根据discern()函数获得的列表信息,对图2的灰度图像的蛋白条带区域灰度值求和。

最后结果返回一个列表:[166251, 100107, 129382, 158781]即表示各条带灰度值


四、局限性

1)扫描灰度值的图像,蛋白条带间不要连在一块,否则将视为一个条带。

2)蛋白条带灰度太低无法识别,需做修改。

3)结果可靠性有待评价,可与其他工具相比较。

### 如何在 IntelliJ IDEA 中配置和使用 Swagger #### 添加 Maven 依赖 为了使 Swagger 能够工作,在 `pom.xml` 文件中需加入特定的依赖项。这可以通过编辑项目的构建文件来完成: ```xml <dependencies> <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <!-- swagger ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency> </dependencies> ``` 这些依赖会引入必要的库用于生成 API 文档以及提供交互式的 UI 页面[^4]。 #### 创建 Swagger 配置类 接着创建一个新的 Java 类用来初始化并配置 Swagger 实例。通常命名为类似于 `SwaggerConfig.java` 的名称,并放置于合适的位置,比如 `config` 包内: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder().title("API文档").description("").termsOfServiceUrl("") .contact(new Contact("", "", "")) .license("").licenseUrl("").version("1.0") .build(); } } ``` 这段代码定义了一个 Spring Bean 来设置 Swagger 的基本信息和其他选项。 #### 启动应用测试 当上述步骤完成后,启动应用程序即可访问默认路径 `/swagger-ui.html` 查看自动生成的 RESTful 接口文档界面。通过浏览器打开该链接可以浏览到所有已暴露出来的 HTTP 请求方法及其参数说明等信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值