Stop Wasting Time: AI’s Impact on Biomedical Research

Discover the unexpected ways AI is boosting biomedical research, saving time, and driving scientific breakthroughs worldwide.

Stop Wasting Time: AI’s Impact on Biomedical Research

Discover the unexpected ways AI is boosting biomedical research, saving time, and driving scientific breakthroughs worldwide.

While developing my “Deep Research for Biomedical” platform, I couldn’t help but reflect on how AI is quietly but powerfully revolutionizing other aspects of biomedical research. Today, other than cold codes, I want to take you beyond and share a real-world, hands-on scenario from my own lab experience — high-throughput image analysis.

Many people think writing code is only necessary for building large, complex software systems. But in the laboratory, especially in biomedical research, coding plays a crucial role in processing massive datasets efficiently. Let me explain.

In my past research projects, I frequently performed immunofluorescence staining and used a confocal microscope to capture images. After that, I have to analyze the images with ImageJ (Fiji), one of the most widely used tools in cell biology imaging. Common analyses included:

  • Cell proliferation: Counting the total number of cells in a sample
  • Protein expression analysis: Measuring expression levels after treatments like siRNA knockdown
  • Subcellular localization: Quantifying protein distribution between the cytoplasm and nucleus
  • Cell hypertrophy: Calculating the surface area of cardiomyocytes (heart muscle cells)

Given the sheer number of images involved in high-throughput experiments, manual counting or measurement simply isn’t practical. That’s where automation with ImageJ macros comes in handy.

The Pre-AI Struggle: Manual Macros and Endless Googling

Before the rise of AI tools like ChatGPT, writing or even finding macros for ImageJ was a frustrating experience. Typically, researchers would spend hours scouring forums and repositories hoping someone had already written the macro they needed. And even if you found a promising script, there was a high chance it didn’t perfectly fit your experimental setup. Adapting someone else’s code to your specific conditions often felt like reinventing the wheel.

In many cases, I found myself manually analyzing images simply because customizing a macro seemed just as time-consuming.

Enter AI: Faster Code, Less Frustration

AI changed everything. With just a few well-phrased prompts, I can now generate custom macro scripts in minutes. Here’s an example of how I structured my prompt to ChatGPT:

  1. “Please write a macro script for analyzing .tiff images in ImageJ.”
  2. “Each dataset contains two images: one DAPI.tiff (nucleus stain) and one GFP.tiff (protein expression). There are 200 sets of images, stored in a single folder (400 images total).”
  3. “Analyze each image pair to count DAPI-positive nuclei, GFP-positive signals, and calculate the percentage of GFP-DAPI overlap.”
  4. “Export the results as a .csv file.”

In less than five minutes, ChatGPT produced a working macro script as shown below.

// === folder Directory=== 
mainFolder = getDirectory("Choose a Directory"); 
fileList = getFileList(mainFolder); 
 
outputFile = mainFolder + "Results.csv"; 
File.open(outputFile); 
File.append("Folder,GroupID,DAPI_Count,Ki67_Count,DAPI_with_Ki67_Count", outputFile); 
 
// === logic to open files === 
pairs = newArray(); 
 
for (i = 0; i < fileList.length; i++) { 
    name = fileList[i]; 
    if (!endsWith(name, ".tif")) continue; 
    splitName = split(name, "_"); 
    if (lengthOf(splitName) != 6) continue; 
 
    // decode file title 
    group = splitName[0];         // A1, A2... 
    id = splitName[3];            // 12 
    ch = splitName[2];            // 1=DAPI, 2=GFP 
 
    key = group + "_" + id; 
    if (ch == "1") { 
        setMetadata(key + "_DAPI", name); 
    } else if (ch == "2") { 
        setMetadata(key + "_GFP", name); 
    } 
} 
 
// === start to analyze batch images=== 
for (i = 0; i < fileList.length; i++) { 
    name = fileList[i]; 
    if (!endsWith(name, ".tif")) continue; 
    splitName = split(name, "_"); 
    if (lengthOf(splitName) != 6) continue; 
 
    group = splitName[0]; 
    id = splitName[3]; 
    key = group + "_" + id; 
 
    dapiFile = getMetadata(key + "_DAPI"); 
    gfpFile = getMetadata(key + "_GFP"); 
 
    if (dapiFile == "" || gfpFile == "") continue; 
 
    print("Processing Pair: " + dapiFile + " + " + gfpFile); 
 
    // open DAPI_CH1 
    open(mainFolder + dapiFile); 
    rename("DAPI"); 
 
    // open GFP_CH2 
    open(mainFolder + gfpFile); 
    rename("Ki67"); 
 
    // === analyze DAPI === 
    selectWindow("DAPI"); 
    run("8-bit"); 
    setAutoThreshold("Default dark"); 
    run("Convert to Mask"); 
    run("Watershed"); 
    run("Analyze Particles...", "size=50-Infinity pixel show=Masks exclude clear add"); 
    nucleiCount = roiManager("count"); 
 
    // save DAPI ROI 
    roiManager("Deselect"); 
    roiManager("Save", mainFolder + "temp_DAPI_ROIs.zip"); 
 
    // === analyze GFP === 
    selectWindow("Ki67"); 
    run("8-bit"); 
    setAutoThreshold("Default dark"); 
    run("Convert to Mask"); 
    run("Analyze Particles...", "size=5-Infinity pixel show=Masks exclude clear add"); 
    ki67Count = roiManager("count"); 
 
    // === overlapping count === 
    roiManager("reset"); 
    roiManager("Open", mainFolder + "temp_DAPI_ROIs.zip"); 
 
    dapiWithKi67Count = 0; 
 
    for (j=0; j<nucleiCount; j++) { 
        roiManager("select", j); 
        run("Measure"); 
        meanKi67 = getResult("Mean", nResults - 1); 
        if (meanKi67 > 0) dapiWithKi67Count++; 
    } 
 
    // output 
    File.append(group + "," + id + "," + nucleiCount + "," + ki67Count + "," + dapiWithKi67Count, outputFile); 
 
    // clean and ready for the next one 
    roiManager("reset"); 
    close("*"); 
    File.delete(mainFolder + "temp_DAPI_ROIs.zip"); 
 
    // remove old metadata 
    setMetadata(key + "_DAPI", ""); 
    setMetadata(key + "_GFP", ""); 
} 
 
File.close(outputFile); 
print("Analysis Complete! Results saved to " + outputFile);

I ran it, and voilà — 200 image sets processed. All I had to do next was import the CSV output into Prism for data visualization and analysis. Done!

This simple but powerful example shows how AI can save researchers hours, if not days, of tedious work, letting us focus on more meaningful scientific questions.


AI’s Broader Impact on Biomedical Research

Of course, AI’s contribution to biomedical research extends far beyond image analysis. It is reshaping fields like:

  • Drug discovery: Accelerating the identification of new drug candidates through predictive modeling
  • Protein structure prediction: Tools like AlphaFold2 have revolutionized structural biology
  • Medical imaging: Enhancing diagnostics in radiology, pathology, and oncology
  • Genomic analysis: Streamlining patient genome interpretation and personalized medicine

According to the World Economic Forum’s 2025 Future of Jobs Report and insights from Boston Consulting Group (BCG) 2023, healthcare and biomedical sectors are among the top beneficiaries of AI advancements. Healthcare isn’t just an AI adopter — it’s a primary field where AI is genuinely transformative.

As scientists, we are at the forefront of this evolution. The integration of AI into our workflows will continue to speed up research, improve accuracy, and unlock new possibilities that were previously unimaginable.

What’s Next?

I’ll keep exploring and sharing how AI continues to reshape biomedical research. Stay tuned for upcoming articles, including an in-depth look at a promising new tool called Virtual Lab — designed to push automation in life sciences even further.